当你使用文件时,你常常需要停下来判定一下一切是否就绪。例如,一个目录可能并不存在或者不可写。下面的函数将帮你解决这类问题。
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
评论
关于file_check_path(&$path)函数
关于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'