Php 如何在at运算符@的情况下禁用禁用功能的错误记录?

Php 如何在at运算符@的情况下禁用禁用功能的错误记录?,php,error-handling,error-reporting,error-log,ini-set,Php,Error Handling,Error Reporting,Error Log,Ini Set,有人知道如何使禁用的函数(在我的例子中是ini\u set())停止抛出错误吗?我通常使用类似于@ini\u set()的插件,但在这个WP插件上,它仍然用以下内容填充错误日志: [2018年4月30日12:01:39 UTC]一体式活动日历:出于安全原因,已禁用ini_set()@/home/burp/public_html/wp content/plugins/All-in-One-Event Calendar/All-in-One-Event Calendar。php:81#2 我怀疑这是

有人知道如何使禁用的函数(在我的例子中是
ini\u set()
)停止抛出错误吗?我通常使用类似于
@ini\u set()
的插件,但在这个WP插件上,它仍然用以下内容填充错误日志:

[2018年4月30日12:01:39 UTC]一体式活动日历:出于安全原因,已禁用ini_set()@/home/burp/public_html/wp content/plugins/All-in-One-Event Calendar/All-in-One-Event Calendar。php:81#2

我怀疑这是因为ini_set实际上设置了一个回调函数,并且在定义的ini_set()函数中调用了另一个ini_set()。下面是错误记录的第81行:

@ini_set( 'unserialize_callback_func', 'spl_autoload_call' );
我是服务器管理员,几年前我禁用了ini_set(),对此我没有问题,我只想禁用登录该脚本时的错误+100个包含ini_集()的WP站点未报告任何错误,仅此一个,尽管ini_集()之前有@before。

@
通常会抑制错误消息,但是定义为的自定义错误处理程序仍会导致通过记录错误

如果触发错误的调用前面有一个
@
,则将返回0。错误处理功能应在记录错误之前检查:

if (error_reporting()) {
    // Report the error
    error_log(...)
}
查看下面的日历代码,您可以看到它是针对非致命错误调用的。您可以简单地在该脚本中添加一个检查

或者,您可以禁用或重新启用该页面


事后编辑:值得注意的是,尽管指定错误的错误日志是由ini_集()被禁用引起的,但该错误源于相关ini_集()中定义的函数回调的深层次(OP中显示的第81行)。所以基本上,这个错误根本不相关。它冒泡到ini_set(),并造成混淆,原因是,甚至这行代码都与实际抛出的错误无关。

您是否阅读了错误消息?不是函数抛出错误,而是PHP抛出错误。禁用错误的最佳方法是删除/修复有问题的行。如果这是第三方脚本,请联系维护人员,了解是否有必要,以及您是否可以删除它。天哪,我知道,我是服务器管理员,几年前禁用了ini_set(),我对此没有问题,我只想禁用登录该脚本时的错误+100个包含ini_set()的WP站点没有报告任何错误,只有这一个,尽管ini_set()之前有@before。这更清楚吗?@ben应该学会用你的标题/身体来清楚地澄清问题,而不是在将来添加文字来让问题看起来滑稽可笑。出现这种混乱是因为您从未明确说明您的意思。
@
装饰程序只是抑制默认的错误显示处理程序,而不是任何自定义处理程序或日志记录本身。(它通常被称为“错误抑制运算符”,但这有点误导。)因此错误报告(0);然后是故障线路,然后是错误报告(E_ALL)?但是@是否已经有效地做到了这一点(将错误报告级别临时设置为0)?因此,它只需要检查错误处理程序,对吗?为了尊重
@
操作符,用户定义的错误处理程序函数需要在调用
错误日志之前手动检查
if(error\u reporting())
,而现在似乎没有这样做。请参阅上面的代码片段。