如何查看“@”抑制的错误?
How to see errors suppressed by '@'?
我作为站点管理员加入了这家疯狂的公司。现在我对数据库配置做了一些更改,这些更改影响了 PHP 脚本的执行。
奇怪的是 PHP 脚本死掉了。他们不会抛出任何错误。当我进入脚本内部时,我意识到它们使用了@error suppression 指令。现在整个代码库有数百万行分布在数千个文件中,不想 运行 类似 sed 的东西来替换 '@'。
但是“@”让我无法进行调试。就像开发人员闭上眼睛,发现黑暗在宣告黑夜来临。
有没有一种方法可以撤消“@”所做的错误抑制并让 php 日志指令处理它。触摸代码库不是一种选择。我期待着通过修改 php 配置或在 bootstrap 文件中添加几行来实现此目的的方法。
如果您有 Xdebug installed and enabled (in development, you should) then you can set the xdebug.scream 配置选项,它会禁用 @-operator。
或者,scream PECL extension 也禁用 @-operator(仅此而已)。
基本上您安装扩展然后将 scream.enabled
ini 设置设置为 true/on。
对于通过 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);
});
这也会显示堆栈。
我作为站点管理员加入了这家疯狂的公司。现在我对数据库配置做了一些更改,这些更改影响了 PHP 脚本的执行。
奇怪的是 PHP 脚本死掉了。他们不会抛出任何错误。当我进入脚本内部时,我意识到它们使用了@error suppression 指令。现在整个代码库有数百万行分布在数千个文件中,不想 运行 类似 sed 的东西来替换 '@'。
但是“@”让我无法进行调试。就像开发人员闭上眼睛,发现黑暗在宣告黑夜来临。
有没有一种方法可以撤消“@”所做的错误抑制并让 php 日志指令处理它。触摸代码库不是一种选择。我期待着通过修改 php 配置或在 bootstrap 文件中添加几行来实现此目的的方法。
如果您有 Xdebug installed and enabled (in development, you should) then you can set the xdebug.scream 配置选项,它会禁用 @-operator。
或者,scream PECL extension 也禁用 @-operator(仅此而已)。
基本上您安装扩展然后将 scream.enabled
ini 设置设置为 true/on。
对于通过 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);
});
这也会显示堆栈。