【问题标题】:AJAX called files displaying errors when error_reporting=off当 error_reporting=off 时,AJAX 调用文件显示错误
【发布时间】:2012-12-17 09:41:21
【问题描述】:

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::attributesToString(),假设 $this 来自第 652 行 /usr/lib/php/XML/Util.php 中的不兼容上下文

可以假设,这破坏了我网站的某些部分,我该如何解决这个问题?

我正在运行 PHP 5.4.10

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

【问题讨论】:

  • display_errors = Off 是从哪里设置的?如果它不在ini 中,它应该在所有相关入口点(或在前端控制器中)
  • 你在正确的 php.ini 中设置了吗?检查phpinfo()php -i 的输出以查看哪个 php.ini 被调用。
  • 不相关但你为什么要禁用E_NOTICE?如果你收到通知,这通常意味着你的代码很糟糕,应该修复......
  • @ThiefMaster 这是针对生产站点的,错误是针对开发/测试站点的。
  • 即使在生产环境中,您也应该启用 E_NOTICE - 只需使用 display_errors=off 并将错误发送到 syslog。

标签: error-handling php error-reporting


【解决方案1】:

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

它的相关错误报告常量称为E_STRICTDocs,即introduced in PHP 5.0Docs

由于 PHP 5.4 E_STRICTE_ALL 的一部分,因此如果您按照自己的方式进行配置,也必须将其从其中删除:

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

因此,如果您从生产错误设置中排除 E_STRICT,则不应再记录这些 严格标准 错误 - 这可能就像您使用早期 PHP 5.3 版本一样.

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

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

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

来自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 代码中更改该设置)。
  • 错误显示已禁用,但仍有some error handlerDocs 显示它们。

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


另见:

【讨论】:

    猜你喜欢
    • 2016-05-25
    • 2019-12-28
    • 1970-01-01
    • 2013-08-11
    • 1970-01-01
    • 2012-07-11
    • 1970-01-01
    • 1970-01-01
    • 2017-02-27
    相关资源
    最近更新 更多