PHP-遞歸掃描目錄和刪除目錄


(1) 通過遞歸掃描目錄並打印

// php遞歸掃描目錄
function scanMyDir($path){ // 打開目錄
    $dh = opendir($path); echo '<ul>'; // 循環讀取目錄
    while(($file = readdir($dh)) !== false){ // 先要過濾掉當前目錄'.'和上一級目錄'..'
        if($file == '.' || $file == '..') continue; // 為了能夠顯示中文目錄/文件,需要進行轉碼
        echo '<li>'.iconv('gbk','utf-8',$file).'</li>'; // 如果該文件仍然是一個目錄,進入遞歸
        if(is_dir($path.'/'.$file)){ scanMyDir($path.'/'.$file); } } echo '</ul>'; } $path = 'e:/Music'; scanMyDir($path);

需要注意的地方:

①在讀取目錄的時候,會讀取.和..,分別表示當前目錄和上一級目錄,需要過濾掉它們以進行后續的打印和操作。

②中文操作系統默認的編碼是gbk,因此目錄與文件的編碼為gbk。想要在網頁上顯示的時候沒有亂碼,需要通過iconv函數進行轉碼。

③這一份代碼是用無序列表來顯示目錄結構的。還有一種辦法:可以添加一個遞歸深度$deep作為函數的參數,默認為0,每一次遞歸加1。這樣不同的層級就擁有了不同的遞歸深度,通過str_repeat()函數來利用遞歸深度,就能讓目錄結構分出層次了。

(2) 通過遞歸刪除目錄及目錄下的文件

 

// php遞歸刪除目錄和文件
function delAll($path){ // 打開目錄
    $dh = opendir($path); // 循環讀取目錄
    while(($file = readdir($dh)) !== false){ // 過濾掉當前目錄'.'和上一級目錄'..'
        if($file == '.' || $file == '..') continue; // 如果該文件是一個目錄,則進入遞歸
        if(is_dir($path.'/'.$file)){ delAll($path.'/'.$file); } else { // 如果不是一個目錄,則將其刪除
            unlink($path.'/'.$file); } } // 退出循環后(此時已經刪除所有了文件),關閉目錄並刪除
    closedir($dh); rmdir($path); } $path = './test'; delAll($path);

 

需要注意的一點是:只有當這個目錄不是工作狀態的時候,才能進行刪除。所以必須要先通過closedir()關閉目錄,並且確保在計算機中也退出了該目錄,再進行刪除的操作。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM