PHP遍历文件夹下所有文件,几种方式glob与opendir,RecursiveDirectoryIterator

glob方式: glob() 函数返回匹配指定模式的文件名或目录。 该函数返回一个包含有匹配文件 / 目录的数组。如果出错返回 false。
$dir="D:\\wamp\\www\\test";
function search($dir){
    $files=array();
    foreach (glob("{$dir}\\*") as $key => $file){
        if(is_dir($file)){
           $files=array_merge($files,search($file));
        }else{
           $files[]=$file;
        }
    }
    return $files;
}
opendir,readdir方式: opendir() 函数打开一个目录句柄,可由 closedir(),readdir() 和 rewinddir() 使用。 若成功,则该函数返回一个目录流,否则返回 false 以及一个 error。可以通过在函数名前加上 "@" 来隐藏 error 的输出。 readdir() 函数返回由 opendir() 打开的目录句柄中的条目。 若成功,则该函数返回一个文件名,否则返回 false。
$dir="D:\\wamp\\www\\test";
function readir($dir){
    $files=array();
    if ($dh = opendir($dir)){
        while(($file = readdir($dh)) !== false){
            if($file=='.'||$file=='..') continue;
            $filedir=$dir.'\\'.$file;
            if (is_dir($filedir)){
                $files=array_merge($files,readir($filedir));
            }else{
                $files[]=$filedir;
            }
        }
        closedir($dh);
    }
    return $files;
}
使用RecursiveDirectoryIterator遍历文件夹,列出所有文件路径
$dir="D:\\wamp\\www\\test";
function get_files($dir) {
    $files = array();
  
    for (; $dir->valid(); $dir->next()) {
        if ($dir->isDir() && !$dir->isDot()) {
            if ($dir->haschildren()) {
                $files = array_merge($files, get_files($dir->getChildren()));
            };
        }else if($dir->isFile()){
            $files[] = $dir->getPathName();
        }
    }
    return $files;
}
$dirIterator= new RecursiveDirectoryIterator($dir);
var_dump(get_files($dirIterator));

你可能感兴趣的:(readdir,opendir,glob)