当error_reporting=off时,AJAX调用文件显示错误


AJAX called files displaying errors when error_reporting=off

php.ini,我的错误显示设置如下:

error_reporting = E_ALL & ~E_NOTICE & ~E_DEPRECATED
display_errors  = Off

适用于任何正常调用的文件,但是,如果使用jQuery/AJAX调用文件,我将收到如下错误:

严格标准:非静态方法XML_Util::replaceEntities()不应该被静态调用,假设$this来自664行/usr/lib/php/xml/util .php中不兼容的上下文

严格标准:非静态方法XML_Util::createTagFromArray()不应该静态调用,假设$this来自1231行/home/site/public_html/site/paypal/lib/Serializer/Serializer.php中不兼容的上下文

严格标准:非静态方法XML_Util:: attributeststring()不应该被静态调用,假设$this来自652行/usr/lib/php/xml/util .php中不兼容的上下文

可以假设,这是打破我的网站的部分,我怎么能解决这个问题?

我正在运行PHP 5.4.10

文件被调用使用Jquery函数:$.get$.post

您正在使用的代码/库正在触发严格标准错误/通知/警告。

相关的错误报告常数是E_STRICT Docs,在PHP 5.0Docs中引入。

由于PHP 5.4 E_STRICTE_ALL的一部分,所以如果你按照你的方式配置,它也必须从它中删除:

error_reporting = E_ALL & ~E_NOTICE & ~E_DEPRECATED & ~E_STRICT
                                                    ^^^^^^^^^^^

因此,如果您将E_STRICT从您的生产错误设置中排除,这些Strict Standards错误应该不再被记录-这可能就像您在早期的PHP 5.3版本中一样。

此外,您应该联系库的供应商并请求使代码 E_STRICT兼容。这是一个很好的实践,也向您展示了一些代码具有一定的质量。

对于您的开发,您应该同样使您的代码E_STRICT兼容,修复任何导致Strict Standards错误的地方。

同样适用于E_NOTICEE_DEPRECATED,您应该在开发环境中启用这些消息并修复所有报告的问题。这可以避免你轻易地得到越来越多的bug。

From php.ini:

;;;;;;;;;;;;;;;;;;;
; Quick Reference ;
;;;;;;;;;;;;;;;;;;;
; The following are all the settings which are different in either the production
; or development versions of the INIs with respect to PHP's default behavior.
; Please see the actual settings later in the document for more details as to why
; we recommend these changes in PHP's behavior.
...
; error_reporting
;   Default Value: E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED
;   Development Value: E_ALL
;   Production Value: E_ALL & ~E_DEPRECATED & ~E_STRICT

从您在问题中提供的信息来看,您看到输出错误消息而不是记录错误消息的原因并不清楚。这可能有多种原因,

  • 是最直接的,因为你没有正确地禁用错误显示-或者在运行时再次启用它(该设置也可以从PHP代码中更改)。
  • 错误显示禁用,但有一些错误处理程序Docs显示它们。

因此,除了错误级别设置之外,您的问题的这一部分需要您进行更多的故障排除,以找出显示错误消息的原因。


参见:

  • 如何禁用E_STRICT(2010年5月17日;rtacconi)
  • 错误报告- PHP的正确方式