我知道glob
可以查找文件夹中的所有文件或仅查找所有目录:
echo "All files:\n";
$all = glob("/*");
var_dump($all);
echo "Only directories\n";
$dirs = glob("/*", GLOB_ONLYDIR);
var_dump($dirs);
但我没有找到能够有效地在一行中找到文件的东西。
$files = array_diff(glob("/*"), glob("/*", GLOB_ONLYDIR));
运行良好,但两次读取目录(即使有some optimizations使第二次浏览更快)。
答案 0 :(得分:52)
我终于找到了解决方案:
echo "Only files\n";
$files = array_filter(glob("/*"), 'is_file');
var_dump($files);
但请注意,array_filter会保留数字键:如果需要重新索引数组,请使用array_values。
答案 1 :(得分:4)
您可以使用GLOB_BRACE
将文档与已知文件扩展名列表进行匹配:
$files = glob("/path/to/directory/*.{jpg,gif,png,html,htm,php,ini}", GLOB_BRACE);
答案 2 :(得分:4)
有一种更简单的方法,只需一行:
$files = glob("/path/to/directory/*.{*}", GLOB_BRACE);
{*} 表示所有文件结尾,因此每个文件都有,但没有文件夹!
答案 3 :(得分:1)
其他解决方案:
$files = glob('../{,.}*', GLOB_BRACE);
foreach ($files as $i => $file) {
if (is_dir($file)) {
unset($files[$i]);
}
}
或者:
$files = glob('../{,.}*', GLOB_BRACE | GLOB_MARK);
foreach ($files as $i => $file) {
if ($file[ strlen($file) - 1 ] == '/') {
unset($files[$i]);
}
}
两者都保留数字键,因此您可能希望re-index。
P.S。如果您想要get hidden files,也必须使用{,.}*', GLOB_BRACE
。
答案 4 :(得分:-10)
$all = glob("/*.*");
这将以“。”列出所有内容。在文件名之后。所以基本上都是所有文件。