echo "Only files\n";
$files = array_filter(glob("/*"), 'is_file');
var_dump($files);
GLOB_BRACE
来将文件与已知文件扩展名列表匹配:$files = glob("/path/to/directory/*.{jpg,gif,png,html,htm,php,ini}", GLOB_BRACE);
。
$files = glob("/path/to/directory/*.{*}", GLOB_BRACE);
{*} 表示所有文件结尾,因此是指所有文件,但不包括文件夹!{}
会替换文件或文件夹中的任何字符,而不加区分。 - Alain Tiemblo反转正则表达式完成任务。
preg_grep(
';^.*(\\\\|/)$;',
glob("/*", GLOB_MARK),
PREG_GREP_INVERT
);
\\\\ 是用于 Windows 反斜杠的符号
相比于@AlainTiemblo的解决方案,快了10%,因为它不使用额外的is_file
检查:
$files = array_filter(glob("/*", GLOB_MARK), function($path){ return $path[ strlen($path) - 1 ] != '/'; });
相反,它使用内置的GLOB_MARK
标志向每个目录添加斜杠,通过array_filter()和匿名函数我们能够删除这些条目。
自PHP 7.1.0起支持负数索引,您也可以使用它来代替:
$files = array_filter(glob("/*", GLOB_MARK), function($path){return $path[-1] != '/';});
没有相关的速度提升,但它有助于避免这篇文章中的垂直滚动条 ^^
由于array_filter()
保留键名,因此您应该考虑在之后使用array_values()重新索引数组:
$files = array_values($files);
glob
中的一个错误。你是否测试过glob("/*", GLOB_MARK)
来验证你的发现?或者你使用了一个太旧的PHP版本中的$path[-1]
? - mguttGLOB_MARK
- 将斜杠(在Windows上是反斜杠)添加到每个返回的目录”,而答案仅使用'/'进行检查。 - DrLightmanfunction glob_file_only($path){
return array_filter(glob($path,GLOB_MARK),function($file){
return substr($file,-1)!=DIRECTORY_SEPARATOR;
});
}
这是在其他人的基础上进行的工作。它只需一次而不是两次触及目录,并且适用于Windows和Linux。
这对我有用。 如果有人需要帮助,请参考。
for file_name in glob.glob('**/*', recursive=True):
# we get all files and dirs
if os.path.isfile(file_name):
# we have only the files
$all = glob("/*.*");
这将列出所有文件名后面带有“.”的内容。基本上,所有文件都会被列出。
glob("*.*")
来获取所有文件,但是如果文件夹名称中含有点(.)或文件没有扩展名时,这种方法将不起作用。 - Get Off My Lawn