我作为网站管理员加入了这家疯狂的公司。现在我对我的数据库配置进行了一些更改,这些更改影响了PHP脚本的执行。
奇怪的部分是PHP脚本就死了。他们不会抛出任何错误。当我进入脚本时,我意识到他们已经使用了@ error suppression指令。现在整个代码库有数百万行分布在数千个文件中,并且不想像sed那样运行替换' @'。
但是' @'让我无法进行调试。它就像开发商正在闭上眼睛,发现黑暗的视野正在说它的夜晚。
有没有办法可以撤消' @'并让php log指令处理它。触摸代码库不是一种选择。我期待通过修改php配置或在bootstrap文件中添加几行来实现此目的。
答案 0 :(得分:6)
如果您已安装并启用Xdebug(在开发中,您应该),那么您可以设置xdebug.scream配置选项,该选项会禁用@ -operator。
或者,scream PECL extension也会禁用@ -operator(就是这样)。
基本上,您安装扩展程序,然后将scream.enabled
ini设置为true / on。
答案 1 :(得分:4)
通过set_error_handler
安装的处理程序仍然可以看到静音错误。所以你可以在你的bootstrap文件中添加这样的东西:
set_error_handler(function ($errno, $errstr, $errfile, $errline) {
echo "$errstr at $errfile($errline)\n";
});
或者更好,
set_error_handler(function ($errno, $errstr, $errfile, $errline) {
throw new ErrorException($errstr, $errno, 1, $errfile, $errline);
});
也会显示堆栈。