我正在尝试编写脚本以递归地进入目录结构以查找*.sm
和*.ssc
文件。但是,我的脚本会跳过名称以点开头的文件夹,例如.Folder Name
。在Windows上-该文件夹未隐藏。
找到正确结果的示例:
/mydir/Directory Name/File Name.sm
找不到的文件示例:
/mydir/.Directory Name/.File Name.sm
function findFiles($directory) {
function glob_recursive($directory, &$directories = array()) {
foreach(glob($directory, GLOB_ONLYDIR | GLOB_NOSORT) as $folder) {
$directories[] = $folder;
glob_recursive("{$folder}/*", $directories);
}
}
glob_recursive($directory, $directories);
$files = array ();
foreach($directories as $directory) {
$directory = str_replace(['[',']',"\f[","\f]"], ["\f[","\f]",'[[]','[]]'], $directory);
foreach(glob("{$directory}/*.{sm,ssc}", GLOB_BRACE) as $file) {
$files[] = $file;
}
}
return $files;
}
答案 0 :(得分:2)
源代码中有一个comment:
初始DOT必须从字面上进行匹配。
尽管Windows中没有隐藏以点开头的文件夹,但php仍将其视为特殊名称。
glob('.*');
这将返回以点开头的文件或文件夹。
因此完整列表可以
array_merge(glob('.*'), glob('*'));