【问题标题】:How to turn down PHP error logging如何关闭 PHP 错误记录
【发布时间】:2012-05-22 10:43:14
【问题描述】:

我们最近将服务器从 PHP4 升级到 PHP5.4

有一个正在运行的应用程序在日志文件中记录了很多错误。大部分是弃用的错误,或者是由于PHP版本的变化而导致的一些小问题。

我现在没有时间解决所有问题,但是 error_log 文件在短短几天内就膨胀到了 10G。

在 php.ini 中我设置 log_errors = 关闭

我还能做什么?

【问题讨论】:

  • 看看修复这些错误
  • 关闭错误记录后是否仍有问题?
  • 你一定是编辑了错误的 php.ini 文件,或者你需要重启 webserver 来让 webserver 进程重新加载 php 配置。使用 phpinfo() 找到正确 php.ini 的位置。报错级别不用改,关掉log_errors就够了。

标签: php apache logging


【解决方案1】:

这取决于您要报告哪些错误(如果有)。如果您不希望报告任何错误(我认为这是个坏主意),请使用:

error_reporting(0);

在脚本的顶部。

如果您只想关闭已弃用的错误,则需要使用predefined error constants 使用一些bitwise operators。我相信以下内容会起作用并符合您的想法:

error_reporting(E_ALL ^ (E_DEPRECATED & E_STRICT & E_NOTICE))

这仍然会留下致命错误和可捕获错误(这 3 个错误中的 2 个将停止脚本,因此它们很容易捕获),但会忽略“您的脚本已旧”类型错误。

也可以将不太需要的错误发送到另一个错误日志,以便以后处理它们,但不会阻塞主要错误日志。有兴趣可以询问。

快速编辑:

因为E_STRICT 不包含在E_ALL 中,所以上面会打开 E_STRICT(只有当我们假设 ALL 意味着,好吧,所有这些(所有位都翻转)。因此这将产生关闭这三个错误的预期结果:

error_reporting(E_ALL ^ (E_DEPRECATED & E_NOTICE))

或者,要吃掉我对zuul回答的评论的话,这也可以(尽管逻辑让我头疼):

error_reporting(E_ALL & ~(E_DEPRECATED | E_STRICT | E_NOTICE))

另外,由于您特别提到了 Apache,您应该知道您不能在 PHP 脚本之外使用预定义的错误常量,您必须使用实际的位掩码值。在这种情况下,您可以将以下内容添加到 config 或 htaccess 文件中:

php_value error_reporting 22519

我在文档中没有找到在这种情况下支持按位运算的任何地方,所以如果您想调整 error_reporting 级别,您可以简单地创建一个包含以下内容的 php 脚本:

echo E_ALL & ~(E_DEPRECATED | E_STRICT | E_NOTICE);

这将输出该位掩码的十进制形式以供使用(显然更改常量以匹配您要关闭的内容)。

【讨论】:

  • +'d,通过带有文档链接的详细答案!这么晚了,我实在是太困了……
  • @Zuul :Awww,很抱歉当时要求更多详细说明的评论。我已经起床 30 个小时了,而且有一段时间没有睡觉,所以我的精心设计部分是为了让我的大脑保持清醒。
【解决方案2】:

只需在 php.ini 中关闭这些警告

error_reporting  = E_ALL & ~E_DEPRECATED

在运行时:

error_reporting(E_ALL & ~E_DEPRECATED);

【讨论】:

  • E_ALL & ~E_DEPRECATED 相当于E_ALL ^ E_DEPRECATED,至少根据位运算符的 php 示例。将再次发布以确认。
  • 是的,都是十进制的 30711。我不确定在可读性方面我是否更喜欢XORAND NOT,但我认为XOR 确实允许更轻松地对错误进行分组以关闭,如我的示例所示。如果您可以提供一个示例,说明如何将AND NOT 用于E_DEPRECATEDE_STRICT,这将对OP 和未来的读者都非常有帮助。
  • 是的,我正在阅读,他们实现了相同的最终目标,除了 E_DEPRECATED 之外的所有错误:使用 error_reporting(E_ALL ^ E_DEPRECATED);error_reporting(E_ALL & ~E_DEPRECATED);
  • 无论如何,根据文档,error_reporting(E_ALL ^ E_DEPRECATED) 的声明似乎更有效!尽管如此,我看不出它有什么不同:)
  • 阅读我的附录,看我吃乌鸦。因为E_ALL 不包括E_STRICT,所以使用& ~ 允许显式关闭E_STRICT(意味着将其关闭),而不是打开它。疯狂。
【解决方案3】:

您可以尝试将以下内容添加到文件顶部:

error_reporting(E_NONE);

【讨论】:

  • 应该是0,没有E_NONE:PHP注意:使用未定义常量E_NONE
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-10-02
  • 1970-01-01
  • 1970-01-01
  • 2013-03-15
  • 2014-01-01
  • 2012-11-10
  • 1970-01-01
相关资源
最近更新 更多