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