You are here

检查目录、路径、位置

g089h515r806 的头像
Submitted by g089h515r806 on 星期四, 2009-08-20 15:39

 

当你使用文件时,你常常需要停下来判定一下一切是否就绪。例如,一个目录可能并不存在或者不可写。下面的函数将帮你解决这类问题。
 
file_create_path($dest = 0)
    这个函数用来获取Drupal的文件系统路径中项目的路径。例如,当启用CSS优化时,Drupal将创建一个css子目录用来存放聚合压缩的CSS文件,它是这样实现的:
 
// Create the css/ within the files folder.
$csspath = file_create_path('css');
file_check_directory($csspath, FILE_CREATE_DIRECTORY);
 
    一些例子,如下所示:
 
$path = file_create_path('foo'); // returns 'sites/default/files/foo'
$path = file_create_path('foo.txt'); // returns 'sites/default/files/foo.txt'
$path = file_create_path('sites/default/files/bar/baz')
// returns 'sites/default/files/bar/baz'
 
$path = file_create_path('/usr/local/') // returns FALSE
 
file_check_directory(&$directory, $mode = 0, $form_item = NULL)
    这个函数检查给定目录的存在和可写。$directory参数是一个目录的路径,由于它是通过引用传递的,所以它必须作为一个变量传递过来。$mode参数是用来判定,当目录不存在或不可写的时候,Drupal应该做什么。表13-4给出了可用的模式。
 
13-4.file_check_directory()的$mode参数的可能值
                      含义
0                           如果目录不存在,不创建目录
FILE_CREATE_DIRECTORY       如果目录不存在,创建目录
FILE_MODIFY_PERMISSIONS     如果目录不存在,创建目录。如果目录已存在,尝试使它可写。
 
    $form_item参数是表单项目的名字,当目录创建失败时,可对其设置错误消息。$form_item参数是可选的。
    这个函数还会测试,正被检查的目录是不是文件系统路径或者临时目录,如果是的话,出于安全性向其添加一个.htaccess文件(参看第20章)。
 
file_check_path(&$path)
    如果你有一个文件路径,你想把它拆分成文件名和基名字,那么可以使用file_check_path()。$path参数必须是一个变量;该变量将被修改为仅包含基名字。这有一些例子:
 
$path = 'sites/default/files/foo.txt';
$filename = file_check_path($path);
 
现在$path为sites/default/files,而$filename为foo.txt。
 
$path = 'sites/default/files/css'; // Where Drupal stores optimized CSS files.
$filename = file_check_path($path);
 
现在$path为sites/default/files;如果css目录不存在,那么$filename为css,否则,$filename为空。
 
$path = '/etc/bar/baz.pdf';
$filename = file_check_path($path);
 
由于/etc/bar不存在或者不可写,所以$path现在为/etc/bar,而$filename现在为FALSE。
 
file_check_location($source, $directory = ‘’)
    有时候你有一个文件路径,但是你却不信任它。可能一个用户输入了它,想使用黑客技巧来获取站点的一些内部信息。(例如,提供了一个files/../../../etc/passwd,而不是一个有效的文件名)。“这个文件真的位于这个目录下面吗?”调用这个函数就可以回答这个问题。例如,如果文件的实际位置不在Drupal的文件系统路径下面,那么将会返回0:
 
$real_path = file_check_location($path, file_directory_path());
 
    如果文件位于Drupal的文件系统路径下面,那么将会返回文件的实际路径。

老葛的Drupal培训班 Think in Drupal

Drupal版本:

评论

biglazy 的头像

关于file_check_path(&$path)函数的使用,第二个例子说明这里有点问题,原文里也是写的感觉不够准确:

------------------------------------------------------------------------------

$path = 'sites/default/files/css'; // Where Drupal stores optimized CSS files.

$filename = file_check_path($path);

现在$path为sites/default/files;如果css目录不存在,那么$filename为css,否则,$filename为空。

$path now contains sites/default/files and $filename now contains css if the css directory

does not exist or an empty string if the css directory exists.

------------------------------------------------------------------------------

测试的结果是:

if exist(css) $path='sites/default/files/css' $filename=''

else if no-exist(css) $path='sites/default/files' $filename='css'