php获取目录文件-php循环获取目录以及所有子目录中的所有文件

PHP 投稿 21300 1 评论

php获取目录文件-php循环获取目录以及所有子目录中的所有文件

php获取目录文件夹下的内容,可用于读取目录文件,循环获取目录以及所有子目录中的所有文件。

/**
 * 循环获取目录以及所有子目录中的所有文件,结果是一个多维数组
 * @param $dir
 * @return array
 */
function listDir($dir) {
    $files = [];

    if (!is_dir($dir)) {
        return $files;
    }

    foreach (scandir($dir) as &$file_name) {
        if ($file_name == '.' || $file_name == '..') {
            continue;
        }

        $files[$file_name] = [
            'file_name' => $file_name,
            'abs_path' => $dir,//绝对地址
        ];

        if (is_dir($dir . DIRECTORY_SEPARATOR . $file_name)) {
            $files[$file_name] += [
                'is_dir' => 1,
                'son' => listDir($dir . DIRECTORY_SEPARATOR . $file_name)
            ];
        } else {
            $info = pathinfo($file_name);
            $files[$file_name] += [
                'is_dir' => 0,
                'file_ext' => isset($info['extension']) ? strtolower($info['extension']) : ''
            ];
        }
    }

    return $files;
}

返回结果示例:

Array
(
    [1] => Array
        (
            [file_name] => 1
            [abs_path] => /var/www/test
            [is_dir] => 1
            [son] => Array
                (
                    [2] => Array
                        (
                            [file_name] => 2
                            [abs_path] => /var/www/test/1
                            [is_dir] => 1
                            [son] => Array
                                (
                                    [3.log] => Array
                                        (
                                            [file_name] => 3.log
                                            [abs_path] => /var/www/test/1/2
                                            [is_dir] => 0
                                            [file_ext] => log
                                        )

                                )

                        )

                    [2.log] => Array
                        (
                            [file_name] => 2.log
                            [abs_path] => /var/www/test/1
                            [is_dir] => 0
                            [file_ext] => log
                        )

                )

        )

    [test.txt] => Array
        (
            [file_name] => test.txt
            [abs_path] => /var/www/test
            [is_dir] => 0
            [file_ext] => txt
        )

)
/**
 * 循环获取目录以及所有子目录中的所有文件,结果是一个二维数组
 * @param $dir
 * @return array
 */
function listDir($dir) {
    static $files = [];

    if (!is_dir($dir)) {
        return $files;
    }

    foreach (scandir($dir) as &$file_name) {
        if ($file_name == '.' || $file_name == '..') {
            continue;
        }

        $files[$file_name] = [
            'file_name' => $file_name,
            'abs_path' => $dir,//绝对地址
        ];

        if (is_dir($dir . DIRECTORY_SEPARATOR . $file_name)) {
            $files[$file_name] += [
                'is_dir' => 1,
            ];

            listDir($dir . DIRECTORY_SEPARATOR . $file_name);
        } else {
            $info = pathinfo($file_name);
            $files[$file_name] += [
                'is_dir' => 0,
                'file_ext' => isset($info['extension']) ? strtolower($info['extension']) : ''
            ];
        }
    }

    return $files;
}

返回结果示例:

Array
(
    [1] => Array
        (
            [file_name] => 1
            [abs_path] => /var/www/test
            [is_dir] => 1
        )

    [2] => Array
        (
            [file_name] => 2
            [abs_path] => /var/www/test/1
            [is_dir] => 1
        )

    [3.log] => Array
        (
            [file_name] => 3.log
            [abs_path] => /var/www/test/1/2
            [is_dir] => 0
            [file_ext] => log
        )

    [2.log] => Array
        (
            [file_name] => 2.log
            [abs_path] => /var/www/test/1
            [is_dir] => 0
            [file_ext] => log
        )

    [test.txt] => Array
        (
            [file_name] => test.txt
            [abs_path] => /var/www/test
            [is_dir] => 0
            [file_ext] => txt
        )

)

编程笔记 » php获取目录文件-php循环获取目录以及所有子目录中的所有文件

赞同 (72) or 分享 (0)
游客 发表我的评论   换个身份
取消评论

表情
(1)个小伙伴在吐槽
  1. 每个角色都有自己的灵魂。
    暗影使者 2023-09-27 02:30 (1年前) 回复