• 技术文章 >后端开发 >php教程

    php遍历子文件,该怎么解决

    2016-06-13 12:18:57原创377
    php遍历子文件


    function list_dir($dirpath){
    //判断路径最后一个字符是不是"\"
    //如果不是 则在路径后加"\"
    if($dirpath[strlen($dirpath)-1]!="\\"){$dirpath.="\\";}
    static $result_array=array();
    //判断给定路径是否是一个目录
    if(is_dir($dirpath)){
    //打开目录句柄
    $handle=opendir($dirpath);
    //从目录句柄中读取条目
    //读取该目录下的所有文件及文件夹
    while($file=readdir($handle)){
    if($file=="."||$file==".."){continue;}
    //判断读取出来的是否是一个目录
    if(is_dir($dirpath.$file)){
    list_dir($dirpath.$file."\\");
    }else{
    //将一个或多个单元压入数组的末尾
    array_push($result_array,$dirpath.$file);
    }
    }
    closedir($handle);
    }
    return $result_array;
    }
    $path="D:";
    $array=list_dir($path);
    foreach($array as $value){
    echo $value;
    echo "
    ";
    }
    ?>
    ]

    要是遍历d盘的时候,由于文件太多,会卡在哪里很久
    有没有什么优化的方法
    ------解决思路----------------------
    减少遍历的范围是唯一优化的方法
    使用 glob 不递归或目录迭代器可使速度提高,但也有限
    $p = './';
    $res = glob("$p/*");
    for($i=0; $i if(is_dir($res[$i]))
    foreach(glob("{$res[$i]}/*") as $f) $res[] = $f;
    }
    print_r($res);
    $path = '.';
    $ite = new RecursiveIteratorIterator( new RecursiveDirectoryIterator($path) );

    $deep = 0;
    foreach ($ite as $cur) {
    $fn = $cur->getBasename();
    if($fn == '.'
    ------解决思路----------------------
    $fn == '..') continue;
    $res[] = $fn;
    if(($d=$ite->getDepth()) == $deep);
    echo "$d $fn
    ";
    }
    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:nbsp dirpath array file res
    上一篇:请问一下php正则表达式 下一篇:PHP Array函数分门别类
    VIP课程(WEB全栈开发)

    相关文章推荐

    • 【腾讯云】年中优惠,「专享618元」优惠券!• php大文件上传如何实现的• 关于HTML登陆界面的有关问题。• thinkphp模型过滤查询字段,表达式步骤• php_表单处置• ThinkPHP2.1 汉语言验证码
    1/1

    PHP中文网