禁用 php 错误日志中的E_DEPRECATED

2022-08-31 00:57:28

我有一个运行商业软件的生产服务器,该软件利用了已弃用的功能。我们已经禁用了php中的错误输出.ini -- --因此用户不会看到这些错误。但是,我们仍在记录PHP错误-- --以跟踪问题。display_errors = Offlog_errors = On

问题是:PHP似乎忽略了关于它最终传递给错误日志的内容的指令。无论输入什么值组合,都会发生文件日志记录,就好像我设置为 .因此,我的错误日志因弃用通知而变得臃肿。error_reportingE_ALL

默认时区值是在 php.ini 中设置的,因此与时区相关的问题无关紧要。

软件包的升级尚不可用,因此请不要建议“仅修复已弃用的代码”。我正在寻找防止PHP在不完全禁用文件日志记录的情况下将已弃用的错误转储到日志中的方法。

服务器详细信息:

  • Ubuntu 10.04.2 LTS
  • 5.3.2 菲律宾比索

答案 1

当 PHP 作为 Apache 模块运行时,您可以访问/更改 Apache 配置文件中使用指令中可用的任何配置设置。这些指令是...php.ini

  • php_value
  • php_flag
  • php_admin_value
  • php_admin_flag

和 版本之间的差异是此问题的关键。使用并且只能在Apache全局和VirtualHost配置中设置的值;它们不能被 .htaccess 或 ini.set() 覆盖php_*php_admin_*php_admin_valuephp_admin_flag

该函数等效于调用,并遵循相同的规则。error_reporting()ini_set()

因此,我进入了相关站点的虚拟主机配置,并添加了以下行...

php_admin_value error_reporting 22527
php_admin_value error_log /custom/log/path/php_errors.log
php_admin_flag  log_errors On
php_admin_flag  display_errors Off
  1. 第一行是 的按位值。我通过创建一个简单的脚本来检索此值:error_reporting = E_ALL & ~E_DEPRECATED

    ini_set("error_reporting", E_ALL & ~E_DEPRECATED);
    echo ini_get("error_reporting");
    

    如果要忽略系统通知以及弃用警报-- --按位值为 。error_reporting = E_ALL & ~E_DEPRECATED & ~E_NOTICE22519

  2. 第二行将所有 PHP 错误发送到自定义日志。默认情况下,PHP将使用该值,通常或类似的东西。syslog/var/log/apache2/error.log

  3. 第三行启用文件日志记录。

  4. 最后一个关闭页面上的错误显示。

同样,操作的优先级和顺序在这里是关键。这些值将取代 中定义的值,同时不能被应用程序或文件中的其他更改覆盖。php.ini.htaccess

有关在 php.ini 外部更改配置值的更多详细信息,请参阅 PHP 文档


答案 2

听起来软件本身可能正在设置错误级别,从而覆盖了 中的设置。php.ini

如果这是真的,你就是SOL。


顺便说一句,如果您使用的是仙人掌,请参阅此处。即使你没有使用仙人掌,我认为它很好地总结了这个场景。


推荐