用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]元素值分別是“.”和“..”,這就是傳說中的兩個目錄,網上查閱了一下,“.”代表當前一級的目錄,“..”代表上一級目錄,如果沒有考慮這兩個目錄的話就要死循環了,切記!




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