如何查看"@"抑制的错误?

cod*_*ark 9 php error-handling

我作为网站管理员加入了这个疯狂的公司.现在我对我的数据库配置进行了一些更改,这些更改影响了PHP脚本的执行.

奇怪的部分是PHP脚本就死了.他们不会抛出任何错误.当我进入脚本时,我意识到他们已经使用了@ error suppression指令.现在整个代码库有数百万行分布在数千个文件中,并且不想像sed那样运行替换'@'.

但'@'让我无法进行调试.就像开发商正在闭上眼睛,发现黑暗的视野正在说它的夜晚.

有没有办法可以撤消'@'所做的错误抑制,并让php log指令处理它.触摸代码库不是一种选择.我期待通过修改php配置或在bootstrap文件中添加几行来实现此目的.

Ste*_*hen 6

如果您已安装并启用了Xdebug(在开发中,您应该),那么您可以设置xdebug.scream配置选项,该选项禁用@ -operator.

或者,尖叫PECL扩展也会禁用@ -operator(这就是它所做的全部).

基本上你安装扩展然后将scream.enabledini设置为true/on.


geo*_*org 5

对于通过 安装的处理程序,静音错误仍然可见set_error_handler。所以你可以在你的引导文件中添加这样的东西:

set_error_handler(function ($errno, $errstr, $errfile, $errline) {
    echo "$errstr at $errfile($errline)\n";
});
Run Code Online (Sandbox Code Playgroud)

或更好,

set_error_handler(function ($errno, $errstr, $errfile, $errline) {
    throw new ErrorException($errstr, $errno, 1, $errfile, $errline);
});
Run Code Online (Sandbox Code Playgroud)

这也将显示堆栈。