PHP - error_get_last警告方法?

时间:2012-10-11 04:53:43

标签: php

我在PHP页面上使用unlink。在某些情况下,可能会拒绝删除目录的权限。而不是

Warning: unlink(stuff/New folder) [function.unlink]: Permission denied in ... on line 30

显示在渲染的页面上,有没有办法让我做一个“warning_get_last”来捕获最后一个给定的警告,所以我可以很好地输出它?或error_get_last包含这些?

我知道我可以使用@unlink来抑制警告,并且我还可以检查unlink是否返回false,但我想知道与其一起出现的错误消息如果确实失败了。

3 个答案:

答案 0 :(得分:9)

使用error_reporting(0)不会在呈现的页面中显示警告或任何错误。它仍将显示在您的服务器错误日志中,您仍然可以使用error_get_last()来获取上一个错误。

你可以用这个来测试它:

error_reporting(0);
unlink('some file that does not exist'); // generates a warning
print_r(error_get_last());

答案 1 :(得分:1)

您编写设置自己的错误处理程序,在调用之前启用它,然后恢复正常。

使用set-error-handler打开错误处理程序,保存到全局变量(这是最简单的 - 也许不是最“正确”)并显示是否有错误。或者用户error_get_last()(由Trott建议)。

function myErrorHandler($errno, $errstr, $errfile, $errline) {
    global $lastErrorString;
    $lastErrorString = $errstr;
    return false;
}

// Calling function:
global $lastErrorString;
$lastErrorString=false;
$old_error_handler = set_error_handler("myErrorHandler");
unlink($file);
restore_error_handler();
if ($lastErrorString !== false) {
    echo 'Went wrong: ' . $lastErrorString;
}

答案 2 :(得分:0)

我不明白为什么以下内容比其他两个提案更糟糕;事实上,我认为它更好,因为它比罗比的答案更短,并且不像特洛特的答案那样具有全局效应:

$ok = @unlink(...);
if ($ok === FALSE)
    throw new Exception(error_get_last()['message']);

运行时输出:

PHP Fatal error:  Uncaught exception 'Exception' with message 'unlink(foobar.txt): No such file or directory' in /Users/erik/code/test.php:5
Stack trace:
#0 {main}
  thrown in /Users/erik/code/test.php on line 5