有没有办法让glob()只有文件?

Ala*_*blo 33 php glob directory-browsing

我知道glob可以查找文件夹中的所有文件或仅查找所有目录:

echo "All files:\n";
$all = glob("/*");
var_dump($all);

echo "Only directories\n";
$dirs = glob("/*", GLOB_ONLYDIR);
var_dump($dirs);
Run Code Online (Sandbox Code Playgroud)

但我没有找到能够有效地在一行中找到文件的东西.

$files = array_diff(glob("/*"), glob("/*", GLOB_ONLYDIR));
Run Code Online (Sandbox Code Playgroud)

运行良好,但两次读取目录(即使有一些优化使第二次浏览更快).

Ala*_*blo 55

我终于找到了解决方案:

echo "Only files\n";
$files = array_filter(glob("/*"), 'is_file');
var_dump($files);
Run Code Online (Sandbox Code Playgroud)

但请注意,array_filter将保留数字键:如果需要重新索引数组,请使用array_values.


Dom*_*öth 8

有一种更简单的方法,只需一行:

$files = glob("/path/to/directory/*.{*}", GLOB_BRACE);
Run Code Online (Sandbox Code Playgroud)

{*}意味着所有的文件结尾,所以每一个文件,但没有文件夹!

  • 另请注意,文件夹名称中可以包含点 (9认同)
  • 不,`{}`无差别地替换文件或文件夹上的任何字符. (2认同)

Raf*_*shi 5

您可以使用GLOB_BRACE文档与已知文件扩展名列表进行匹配:

$files = glob("/path/to/directory/*.{jpg,gif,png,html,htm,php,ini}", GLOB_BRACE);
Run Code Online (Sandbox Code Playgroud)

请参阅:http://www.electrictoolbox.com/php-glob-find-files/

  • 在大多数情况下都可以工作,但要注意,如果你愿意,目录也可以命名为`toto.jpg`. (9认同)