魏长东

weichangdong

东邪

php几种遍历目录文件的方法

第一种用opendir,readdir,closedir系统函数遍历。应该是最常用的。

function myscandir($dir){
        $link = opendir($dir);
        $allfile =array();
        while(($value=readdir($link)) !== false){
                if ($value!='.' && $value!='..') {
                        if (is_dir($dir.'/'.$value)) {
                                $allfile[$dir]=myscandir($dir.'/'.$value);
                        }else {
                                $allfile[]=$dir.'/'.$value;
                        }
                }
        }
        closedir($link);
        return $allfile;
}
$v=myscandir('/home/test');
print_R($v);

第二种用scandir,这个需要对scandir出来的结果进行处理。

$v=scandir('/home/test');
function myscan($v)
{
        foreach ($v as $t){
                if($t=='.'||$t=='..')continue;
                if(is_dir($t)){
                        $tmp=scandir("/home/test/$t");
                        $file[$t]=myscan($tmp);
                }else{
                        $file[]=$t;
                }
        }
        return $file;
}
$v=myscan($v);
print_R($v);

第三种,用glob函数,这个和scandir差不多,也需要吧glob的结果拿来重新处理。

$wcd=glob("/home/test/*");
function myglob($wcd){
        foreach ($wcd as $v) {
                if(is_dir($v)){
                        $d=glob($v."/*");
                        $www[$v]=myglob($d);
                }else{
                        $www[]=$v;
                }
        }
        return $www;
}
$wcd=myglob($wcd);
print_R($wcd);

执行结果如下:

这个目录下所有的文件,有这些

[root@swordman test]# find ./
./
./sort
./wcd
./wcd/wcd.txt
./test.php
./wcd.exp
Array
(
    [0] => /home/test/sort
    [/home/test] => Array
        (
            [0] => /home/test/wcd/wcd.txt
        )

    [1] => /home/test/test.php
    [2] => /home/test/wcd.exp
)
Array
(
    [0] => sort
    [1] => test.php
    [wcd] => Array
        (
            [0] => wcd.txt
        )

    [2] => wcd.exp
)
Array
(
    [0] => /home/test/sort
    [1] => /home/test/test.php
    [/home/test/wcd] => Array
        (
            [0] => /home/test/wcd/wcd.txt
        )

    [2] => /home/test/wcd.exp
)