在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_STRICT
是E_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_NOTICE
和E_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的正确方式