php刪除目錄,資料夾-rmdir,unlink

偶然看到以前案子寫的php刪除子目錄函式,想起當時php4的rmdir無法強制移除整個資料夾,如果資料夾內有檔案,就要先把它們刪除unlink,才能移除這個資料夾…
php刪除目錄,資料夾-rmdir,unlink

稍有閒情,回到官網搜尋php5的函式庫看有沒有新增這功能,竟然還是沒有…雖然我個人覺得這應該是很基本的函式,顯然官方的見解不同,大概很少人需要用到?

官方手冊rmdir留言板有網友提供自行撰寫的函式,記錄一下:
1. delTree

function delTree($dir) { 
    $files = glob( $dir . '*', GLOB_MARK ); 
    foreach( $files as $file ){ 
        if( substr( $file, -1 ) == '/' ) 
            delTree( $file ); 
        else 
            unlink( $file ); 
    } 
    
    if (is_dir($dir)) rmdir( $dir ); 
    
}

2. deleteDirectory

function deleteDirectory($dir) { 
    if (!file_exists($dir)) return true; 
    if (!is_dir($dir) || is_link($dir)) return unlink($dir); 
        foreach (scandir($dir) as $item) { 
            if ($item == '.' || $item == '..') continue; 
            if (!deleteDirectory($dir . "/" . $item)) { 
                chmod($dir . "/" . $item, 0777); 
                if (!deleteDirectory($dir . "/" . $item)) return false; 
            }; 
        } 
        return rmdir($dir); 
    } 

註:做的事情都一樣,就是強制刪除目錄,效能誰好?還有閒情時再來測吧^^”

您可能也會喜歡…

3 個回應

  1. ut表示:

    太感謝了!! 解決了我一個大問題!! 第二個方法才可以成功!

  2. 表示:

    想請問 我要做一個網頁 可供會員把喜愛房屋加入會員這個網頁的”會員最愛”裡…然後會員可以在會員最愛看喜愛的房屋資料..並且可以勾選這些房屋刪除掉
    但我不會做勾選核塊區域刪除的部份

    如果大大有時間並願意的話 請幫我解答 謝謝

  3. dean表示:

    我用 第二個 function 去刪除 我無法用 DOS 指令移除的資料夾
    結果跑出了
    Fatal error: Allowed memory size of 25165824 bytes exhausted (tried to allocate 172 bytes)
    似乎已經超過記憶體極限了….

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *