Drupal提供了一个功能强大的函数file_scan_directory()。它浏览一个目录,从中查找匹配给定模式的文件。
file_scan_directory($dir, $mask, $nomask = array('.', '..', 'CVS'), $callback = 0, $recurse = TRUE, $key = 'filename', $min_depth = 0)
让我们简要的学习一下这个函数签名:
• $dir是进行搜索的目录的路径。不要在结尾处包含符号“/”。
• $mask是一个模式,用来应用于目录中所包含的文件。它是一个正则表达式。
• $nomask是一个正则表达式数组。任何匹配$nomask模式的东西都将被忽略。默认数组包含.(当前目录), .. (父目录), 和CVS。
• $callback为每个匹配所调用的函数的名字。将向回调函数传递一个参数:文件的路径。
• $recurse是一个布尔值,用来指示搜索是否递归到子目录中去。
• $key用来决定为file_scan_directory()返回的数组使用什么键。可能的值有filename (匹配的文件的完整路径), basename (filename without path 不带路径的文件名字), 和name (filename without path and without file suffix不带文件路径和后缀的文件名字)。
• $min_depth是能够从中返回文件的目录的最小深度。
返回值是一个包含对象的关联数组。数组的键取决于$key参数的值,默认为filename。下面是一些例子。
扫描themes/bluemarine目录,查找以.css结尾的任意文件:
$found = file_scan_directory('themes/bluemarine', '\.css$');
生成的包含对象的数组如图13-8所示。
图 13-8. file_scan_directory()返回的默认结果是一个包含对象的数组,其中以完整的文件名为键
将$key参数修改为basename将改变结果数组的键,如下面的代码和图13-9所示。
$found = file_scan_directory('themes/bluemarine', '\.css$', array('.', '..', 'CVS'),
0, TRUE, 'basename');
图 13-9.现在的结果是以文件名为键,原有的完整文件路径被省略了
$callback参数的使用,可使得Drupal方便的清空最优化CSS文件缓存,后者通常位于sites/default/files/css。drupal_clear_css_cache()函数使用file_delete作为回调:
file_scan_directory(file_create_path('css'), '.*', array('.', '..', 'CVS'),
'file_delete', TRUE);
老葛的Drupal培训班 Think in Drupal