列出一个目录中的所有文件 PHP

355

如何用PHP列出一个目录中的所有文件是最好的方式?是否有一个$_SERVER函数可以做到这一点?我想列出usernames/目录中的所有文件,并循环遍历结果以链接方式,以便我只需点击文件名的超链接即可进入该文件。谢谢!


8
glob() 或 scandir() 是明显的选择。 - Mark Baker
1
你能否给出一个使用这些函数的代码示例,或者更详细地解释一下它们? - Shadowpat
1
对于示例和解释,文档确实是最好的去处...它是官方来源... - Lix
9
$temp_files = glob(dir.'/*'); foreach($temp_files as $file) { // 在当前目录下获取所有文件路径并赋值给$temp_files,然后遍历$temp_files中的每个文件路径并将其赋值给$file // 接下来是需要在循环体内执行的代码,因为题目中省略了这部分,所以无法进行翻译 - T.Todua
通常情况下,glob 是更好的选择。 - Peter Krauss
显示剩余2条评论
2个回答

773
您正在寻找命令scandir
$path    = '/tmp';
$files = scandir($path);

下面的代码将从 scandir 返回的数组中删除 . ..

$files = array_diff(scandir($path), array('.', '..'));

100
这是更加优雅的解决方案。我还建议添加/推荐 $files = array_diff(scandir($path), array('..', '.')); 的代码行。 - kyle
36
实际上不是 $files 而是 $filesAndDirs - vladkras
14
$files = array_values(array_diff(scandir($path), array('.', '..'))); // 这将重新索引数组,其中包括路径 $path 下除了 '.' 和 '..' 之外的文件名。 - SagarPPanchal
4
我在寻找目录时遇到了一点小问题。$files = array_diff(scandir(__DIR__ .$path), array('.', '..')); 解决了这个问题。参考来源:https://dev59.com/NWfWa4cB1Zd3GeqPdhh9 - Stack Underflow
4
使用**array_values()函数对经过array_diff()**处理后的数组进行重新索引:array_values(array_diff(scandir($path), array('..', '.'))); - vinsa
显示剩余3条评论

313

看看这个: readdir()

这段代码可以列出特定目录中的所有条目:

if ($handle = opendir('.')) {

    while (false !== ($entry = readdir($handle))) {

        if ($entry != "." && $entry != "..") {

            echo "$entry\n";
        }
    }

    closedir($handle);
}

编辑:miah的解决方案比我的更优雅,您应该使用他的解决方案。


4
这段代码非常完美 $files = scandir($imgspath); $total = count($files); $images = array(); for($x = 0; $x <= $total; $x++): if ($files[$x] != '.' && $files[$x] != '..') { $images[] = $files[$x]; } endfor; - Patrick Mutwiri
3
更好地使用 glob() 函数! http://php.net/manual/en/function.glob.php - Peter Krauss
当性能很重要时,这可能是更好的解决方案:readdir-vs-scandir - SAMPro
2
你的优势在于:你可以在一个循环中进行筛选。比如说,你只想要 .html 文件,而且不想要包含 404 的文件,你可以在一个循环中使用你的解决方案来实现这个目标。而 Miah 则需要再次循环结果。 - Toskan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接