我有:
ini_set('display_errors', 0);
ini_set('display_startup_errors', 0);
它似乎有效,但当我使用copy()
函数并尝试复制到拒绝访问的目录时,页面本身会显示错误。我不需要它。但我不能拦截copy()
的错误。我试过了error_get_last()
和try...catch (Exception $e)
,但仍然无法拦截它?如何在页面上禁用显示复制错误以及如何在代码中拦截它们?
答案 0 :(得分:0)
从运行时开始使用它更好(也更可靠):
error_reporting(0);
请参阅:http://php.net/manual/en/function.error-reporting.php了解详情。
您也可以通过在表达式前添加@
:
@copy(...)
请参阅:http://php.net/manual/en/language.operators.errorcontrol.php以获取更多信息,还要注意这会导致性能下降并导致表达式返回布尔值false,如果发生错误,无论其原始返回类型如何。
值得注意的是:
如果您使用的是nginx + php-fpm(或类似的),则可以在php-fpm的池配置中覆盖ini值。
如果您使用的是apache + mod_php,则可以在.htaccess文件中覆盖值。
在解析为error_reporting(0)
之前,检查一下,完全关闭error_reporting不是你应该做的,因为这可能导致逻辑损坏(许多流行的库和框架依赖于错误报告,通过设置处理程序来将错误转换为例外)。
就可移植性而言,首选使用错误抑制运算符,请说明它对性能的影响。
答案 1 :(得分:0)
如果您需要捕捉复制错误,那么:
set_error_handler(function ($errno, $errstr, $errfile, $errline) {
// Log the error somewhere without spooking the users
return true;
}
copy(...);
restore_error_handler();
这样你就可以“沉默”这个错误并保持其他一切工作。