Skip to content

Latest commit

 

History

History
79 lines (71 loc) · 1.84 KB

写一个函数, 能够遍历一个文件夹下的所有文件和子文件夹.md

File metadata and controls

79 lines (71 loc) · 1.84 KB

写一个函数, 能够遍历一个文件夹下的所有文件和子文件夹

目录结构

--|test
--|--|core
--|--|--|core.txt
--|--|--|cms
--|--|--|--|cms.txt
--|--|vender
--|--|1.txt

函数说明

opendir -- 打开目录句柄
说明
resource opendir(string path)
返回一个目录句柄,可以在之后用在closedir(),readdir()和rewinddir()
如果path不是一个合法的目录或者因为权限限制或文件系统错误而不能打开目录,
opendir()返回FALSE并产生一个E_WARNING级别的PHP错误信息,
可以在opendir()前面加上@符号来抑制错误信息的输出

readdir -- 从目录句柄中读取条目
说明
string readdir(resource dir_handle)
返回目录中下一个文件的文件名,文件名以在文件系统中的排序返回
明确地测试返回值是否全等于FALSE,否则任何目录项的名称值为FALSE的都会导致循环停止(例如一个目录名为'0')

is_dir -- 判断给定文件名是否是一个目录
说明
bool is_dir(string filename)
如果文件名存在并且为目录则返回TRUE

代码

<?php

function myScandir($dir) {
    $arr = [];
    if ($handle = opendir($dir)) {
        while (($file = readdir($handle)) !== false) {
            // 排除 . 和 ..
            if ($file != ".." && $file != ".") {
                if (is_dir($dir . "/" . $file)) {
                    $arr[$file] = myScandir($dir . "/" . $file);
                } else {
                    $arr[] = $file;
                }
            }
        }
        closedir($handle);
        return $arr;
    }
}

$arr = myScandir("./test");
print_r($arr);

运行结果

Array
(
    [0] => 1.txt
    [core] => Array
        (
            [cms] => Array
                (
                    [0] => cms.txt
                )

            [0] => core.txt
        )

    [vendor] => Array
        (
        )

)