我在PHP页面上使用unlink
。在某些情况下,可能会拒绝删除目录的权限。而不是
Warning: unlink(stuff/New folder) [function.unlink]: Permission denied in ... on line 30
显示在渲染的页面上,有没有办法让我做一个“warning_get_last”来捕获最后一个给定的警告,所以我可以很好地输出它?或error_get_last
包含这些?
我知道我可以使用@unlink
来抑制警告,并且我还可以检查unlink
是否返回false,但我想知道与其一起出现的错误消息如果确实失败了。
答案 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