用scan_dir()自定义方法自动遍历目录及其子目录




今天看了一期PHP教程,里面留了个作业是写个遍历目录及其子目录的程序。


于是我就大致的写了,可是完成后发现程序总是进行死循环,仔细检查了一下所有代码,逻辑、拼写什么的都没错误,但为什么就会死循环?这问题折腾了我半天,后来终于发现,在PHP里有个特殊的目录。


下面先把我写的代码放出来:


<?php
function out($path){
    $f=scandir($path);
    foreach($f as $v){
        if($v=='.'||$v=='..') continue;
        if(is_dir($path.$v)){
                $path=$path.$v.'/';
            out($path);
        }else{
            echo $v.'</br>';
                                                                                                                                                                   
        }
    }
}
out("D:/123/");
?>


这是一个自定义函数,参数$path是文件路径。代码如果慢慢看的话很快就能看懂,在这里就不进行太多解释了。


主要是讲一下里面的最关键的一点,就是第5行,要注意,我之前的死循环就是死在这里的。当调用out()函数时,如果给的路径不是根目录(比如C:/、D:/、E:/这样的)的话,像我这例子中是D:/123/,是D盘下的一个子目录。如果是这样的话,遍历的时候会有两个特殊的目录“.”和“..”,你可以这么试验:

<?php
    $f=scan_dir("D:/123/")
    print_r($f);
?>


把scan_dir()后的数组打印出来,会发现[0]和[1]元素值分别是“.”和“..”,这就是传说中的两个目录,网上查阅了一下,“.”代表当前一级的目录,“..”代表上一级目录,如果没有考虑这两个目录的话就要死循环了,切记!




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章