当前位置: 首页 > 面试题库 >

列出具有PHP递归功能的目录中的所有文件和文件夹

阴英武
2023-03-14
问题内容

我正在尝试浏览目录中的所有文件,如果有目录,则浏览其所有文件,依此类推,直到没有更多目录可访问。每个处理的项目将添加到下面的函数中的结果数组中。尽管我不确定我能做什么/我做错了什么,但是它不起作用,但是当处理下面的代码时,浏览器的运行速度非常慢,不胜感激,谢谢!

码:

    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'));

问题答案:

获取目录中的所有文件和文件夹,如果拥有.或,请不要调用函数..

您的代码:

<?php
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;
}

var_dump(getDirContents('/xampp/htdocs/WORK'));

输出(示例):

array (size=12)
  0 => string '/xampp/htdocs/WORK/iframe.html' (length=30)
  1 => string '/xampp/htdocs/WORK/index.html' (length=29)
  2 => string '/xampp/htdocs/WORK/js' (length=21)
  3 => string '/xampp/htdocs/WORK/js/btwn.js' (length=29)
  4 => string '/xampp/htdocs/WORK/js/qunit' (length=27)
  5 => string '/xampp/htdocs/WORK/js/qunit/qunit.css' (length=37)
  6 => string '/xampp/htdocs/WORK/js/qunit/qunit.js' (length=36)
  7 => string '/xampp/htdocs/WORK/js/unit-test.js' (length=34)
  8 => string '/xampp/htdocs/WORK/xxxxx.js' (length=30)
  9 => string '/xampp/htdocs/WORK/plane.png' (length=28)
  10 => string '/xampp/htdocs/WORK/qunit.html' (length=29)
  11 => string '/xampp/htdocs/WORK/styles.less' (length=30)


 类似资料:
  • 问题内容: 假设我有一个目录中,其中有3个符号连接其他目录 ,和。我想列出中的所有文件,包括在那些,和。 为了更通用,我想列出所有文件,包括目录中的符号链接文件。,等停止在符号链接上,而无需导航到它们以进一步列出。 问题答案: 该选项将完成您想要的。它取消引用符号链接。 因此,您的命令将是: 您也可以使用 该选项指示find跟随符号链接到目录。 在Mac OS X上使用 如已弃用。

  • 问题内容: 我已经看到了 列出目录中所有文件的 函数,但是我又如何也可以列出 子目录 中的所有文件,因此它会 返回一个数组 ? 所以 类似于 问题答案: foreach (new RecursiveIteratorIterator(new RecursiveDirectoryIterator(‘.’)) as $filename) { // filter out “.” and “..” if (

  • 问题内容: 我有此功能,以递归方式打印目录中所有文件的名称。问题是我的代码很慢,因为它每次迭代都必须访问远程网络设备。 我的计划是先从目录中递归加载所有文件,然后再使用正则表达式遍历所有文件,以过滤掉我不需要的所有文件。有谁有更好的建议? 这只是稍后的测试,我将不使用这样的代码,而是将与高级正则表达式匹配的每个文件的路径和修改日期添加到数组中。 问题答案: 假设这是你将要编写的实际生产代码,那么我

  • 我想列出指定目录中的所有文件以及该目录中的子目录。不应列出任何目录。 我该怎么解决这个?

  • 问题内容: 请给我一个使用php列出目录中所有文件夹,子文件夹,文件的解决方案。我的文件夹结构是这样的: 我想获取每个文件夹内所有文件的列表。 php中有任何shell脚本命令吗? 问题答案:

  • 问题内容: 我正在尝试获取目录中所有文本文件的名称。如果目录中包含子目录,那么我也想在这些子目录中获取任何文本文件。我不确定如何继续执行任意数量的子目录。 现在,下面的代码仅获取当前目录中的所有文本文件以及该目录中的子目录。对于找到的每个子目录,它还会找到任何文本文件和更深的子目录。问题是,如果那些更深的子目录还有更深的子目录,那么我找不到所有的文本文件。这似乎是一个需要递归的问题,因为我不知道它