首页 > 后端开发 > php教程 > 如何使用 PHP 递归列出目录中的所有文件和文件夹,避免无限循环和重复条目?

如何使用 PHP 递归列出目录中的所有文件和文件夹,避免无限循环和重复条目?

Linda Hamilton
发布: 2024-12-02 10:05:15
原创
882 人浏览过

How Can I Recursively List All Files and Folders in a Directory Using PHP, Avoiding Infinite Loops and Duplicate Entries?

利用递归 PHP 函数确定目录中的文件和文件夹

本讨论研究递归遍历目录文件和子目录的方法。

提供的代码:

function getDirContents($dir){
    $results = array();
    $files = scandir($dir);
    foreach($files as $key => $value){
        if(!is_dir($dir. DIRECTORY_SEPARATOR .$value)){
            $results[] = $value;
        } else if(is_dir($dir. DIRECTORY_SEPARATOR .$value)) {
            $results[] = $value;
            getDirContents($dir. DIRECTORY_SEPARATOR .$value);
        }
    }
}
print_r(getDirContents('/xampp/htdocs/WORK'));
登录后复制

困境:
给定的代码拥有用于探索目录和文件的递归函数。但是,它无法忽略“.”。和“..”,导致潜在的无限循环。而且,每个文件和目录在结果中都是重复的。

答案:
为了解决这个问题,我们可以修改函数如下:

function getDirContents($dir, &$results = array()) {
    $files = scandir($dir);
    foreach ($files as $key => $value) {
        $path = realpath($dir . DIRECTORY_SEPARATOR . $value);
        if (!is_dir($path)) {
            $results[] = $path;
        } else if ($value != "." && $value != "..") {
            getDirContents($path, $results);
            $results[] = $path;
        }
    }
    return $results;
}
登录后复制

这段代码:

  • 调用realpath()函数来检索每个文件和目录的实际路径,消除任何潜在的遍历问题。
  • 忽略由“.”表示的目录或 '..',这可能导致无限循环。
  • 通过将结果存储在按引用传递的数组 (&$results) 中来避免结果中的重复条目。

以上是如何使用 PHP 递归列出目录中的所有文件和文件夹,避免无限循环和重复条目?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板