【问题标题】:suppress 2048 errors in php抑制 php 中的 2048 错误
【发布时间】:2012-11-05 20:53:29
【问题描述】:

首先,我在谷歌上搜索了将近 40 分钟,但找不到特定问题的答案。我知道最好修复错误,但这不是这里的问题。

我需要做的是让 php 不报告 2048 错误。原因是,我继承了一个站点,我需要设置一个关闭功能来捕获致命错误并向我发送短信。这一切都很好。但是代码不断抛出 2048 错误,因此当我的关闭函数遇到最后一个错误时,抛出的始终是 2048,而不是实际的致命错误。我不需要关闭显示错误,因为这不是问题。它是我关心的后端处理。

我已通过关闭错误报告对此进行了测试。当我这样做时,我得到了预期的结果,但这意味着我无法在服务器上记录其他错误。我只是希望它忽略 2048 错误,我认为这是 E_STRICT。但是,我的错误报告仅设置为 E_ERROR,我不认为 E_STRICT 包含在其中。

那么,如何让 php 完全停止报告 2048 错误,这样它们就不会覆盖我实际的致命错误?但是保留E_ERROR,这样我就可以在服务器上记录其他错误了……

编辑

这已经解决了……有点:

我仍然不知道如何正确抑制该错误或为什么 error_reporting() 会影响 error_get_last。但是,解决了在服务器上仍然记录错误时能够忽略该错误的根本问题。我只是将错误报告完全关闭,并将错误报告添加到我的关闭功能中,以手动将数据写入日志文件。

这是我用于所有非致命错误的代码:

        $message="\n[".date('d-M-Y H:i:s',time())."] PHP Notice:  ".$e['message']." in ".$e['file']." on line ".$e['line'];
        $file=dirname(__FILE__) . '/error_log-'.date("m-d-Y").'.txt';
        file_put_contents($file, $message, FILE_APPEND | LOCK_EX);

这不是我要寻找的答案,但它解决了我的问题我仍然想知道是否有人真的知道如何关闭 e_strict 报告,这样它就不会出现在 error_get_last() 中。

和平。

【问题讨论】:

  • 您是否尝试过确保它不是:error_reporting(E_ALL & ~E_STRICT);,例如。也许 php.ini 有错误或正在启用 E_STRICT。
  • 我明确设置 error_reporting( E_ALL );在代码中。我试过了:error_reporting(E_ALL & ~E_STRICT);和error_reporting(E_ALL ^ E_STRICT);他们都没有工作。它们仅用于显示错误并将其记录到服务器。但不适用于 php 在 error_get_last 中报告的内容
  • 对不起,我的意思是我正在设置它 error_reporting( E_ERROR );不是e_all

标签: php error-handling shutdown error-reporting


【解决方案1】:

你是如何设置报错级别的,如果设置为E_ERROR,那么E_STRICT会被跳过。

error_reporting(E_ERROR);

【讨论】:

  • 这就是我的想法,但是无论出于何种原因,当我在关闭函数中调用 error_get_last 时,它都会给我 E_STRICT 错误而不是致命错误。
  • @Chris error_get_last 不会受到error_reporting 设置的影响,您需要通过$error['type'] & error_reporting() === 0 进行检查以决定是否忽略错误。
  • 当我设置 error_reporting(0) 它会影响它。所以一定有一些相关性。我正在检查它,以便它只发送致命错误的短信。但是,这永远不会发生,因为最后一个错误总是 E_STRICT。即使我故意设置了一个致命错误,只要将 error_reporting 设置为 off 以外的任何值,shutdown 功能仍然会成为最后一个错误。
【解决方案2】:

用这个修改你的 PHP.ini 文件

E_ALL & ~E_STRICT

这将显示除 E_STRICT 之外的所有错误..

在您的 PHP 文件中

error_reporting(E_ALL | E_STRICT);

更多知识请访问 PHP NET http://php.net/manual/en/migrating5.errorrep.php

【讨论】:

  • 试过了.. 它适用于在屏幕上显示错误。但是 error_get_last 仍然会记录严格的错误。
猜你喜欢
  • 2018-08-08
  • 2013-01-16
  • 2013-02-18
  • 2012-02-07
  • 1970-01-01
  • 1970-01-01
  • 2015-11-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多