2012-02-24 52 views
2

rmdir()顯示一些警告,如dir不存在或權限不允許。我如何獲得失敗的原因並對其作出反應?使用php檢測rmdir錯誤

+3

如果你有PHP 5.2.0或更高版本,請參閱[error_get_last()](http://php.net/error_get_last) – drew010 2012-02-24 22:22:11

回答

3

rmdir不會拋出異常,所以你不能用try/catch來捕捉它們。你可以做的是使用error_get_last函數來做你需要的。

嘗試這樣:

if ([email protected]('/root')) { 
    $error = error_get_last(); 

    if (preg_match('/something/', $error['message'])) { 
     // do something 
    } elseif (preg_match('/somethingelse/', $error['message'])) { 
     // do something 
    } 
} 
+0

我以前沒有用過,感謝這個例子! – Poe 2012-02-24 22:40:00

0

你可以把try-catch塊周圍:http://php.net/manual/en/language.exceptions.php

try { 
    rmdir($nonExistingDir); 
} catch (Exception $e) { 
    echo 'Caught exception: ', $e->getMessage(), "\n"; 
} 

但正確提到的評議,這僅僅是警告,所以你需要在一個單獨的答案中概述的方法事先檢查。

+1

AFIK,這些都不例外,只顯示警告和錯誤,但執行仍在繼續。 – drew010 2012-02-24 22:22:57

+0

剛剛注意到,當我點擊發送 – mindandmedia 2012-02-24 22:23:28

+1

mkdir生成php警告,而不是例外。你不能發現錯誤,警告或通知。您可以另一方面定義一個自定義錯誤處理函數,將錯誤/警告轉換爲異常。但有一些限制。 – Basti 2012-02-24 22:24:22

0

,如果你被允許做某種動作像file_exists()is_ dir(),以檢查是否存在一個目錄和fileperms()或只是is_ writable()檢查,如果你可以寫一個目錄,您可以事先檢查。

你也可以嘗試像例外一樣「捕捉」錯誤。你可以指定一個自定義錯誤處理程序,但這似乎有點矯枉過正。

+0

另外,檢查'empty(scandir($ dir))'會有幫助,因爲'rmdir'不能刪除非空目錄。我通常只使用'\'rm -rf $ dir \'' – Roberto 2012-02-24 22:29:22