2012-02-24 53 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