我们有一个应用程序,其中包含一个非常非常古老的类来连接到专有数据库的 API。此代码会生成大量弃用错误,然后将其记录下来,从而污染我们的日志文件。
我们只想基本上忽略此供应商提供的类的弃用错误,但我无法找到执行此操作的最佳方法。我见过的选项:
使用抑制警告@
.看起来像这不适用于包含 https://stackoverflow.com/a/18913037/357801,仅适用于有返回值的函数。
创建包含 include 的包装器脚本,并关闭 include 语句之前的警告。 As ini_set全球行动 https://stackoverflow.com/a/6491024/357801,关闭所有弃用警告,这不是一个可行的解决方案。
更新供应商提供的脚本。我们宁愿不走这条路,因为如果新版本到来,但不能完全解决这些错误,但添加了新功能,则需要额外的工作和维护。
还有其他选项可以禁用我缺少的这个特定供应商库中的警告吗?
您可以附加一个用户错误处理程序,以便在 PHP 发现错误之前消除错误。仅当错误是在有罪库的源内部生成时,该处理程序才会进行干预。例如:
class SingleSourceFileErrorSuppressor
{
private $_file;
public function __construct($file)
{
$this->_file = $file;
}
public function handleError($errno, $message, $file)
{
if ($file !== $this->file) return false;
}
}
您可以像这样使用该类:
$naughtyLibrary = realpath('naughty.class.php');
$suppressor = new SingleSourceFileErrorSuppressor($naughtyLibrary);
set_error_handler([$suppressor, 'handleError'], E_DEPRECATED);
require($naughtyLibrary);
更新:我认为即使对于微不足道的修改,修改供应商的库源也不是最好的主意,因为您必须记住维护它们,因此更改了建议的安装过程。新过程有一个不同的缺点:它不会自动搜索include_path
。原始建议可通过答案的编辑历史记录获得。选择你的毒药。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)