在php错误日志中禁用E_DEPRECATED

Fra*_*ehl 14 php error-log

我有一个运行商业软件的生产服务器,它利用了已弃用的功能.我们已经在php.ini中禁用了错误输出display_errors = Off- 所以用户没有看到这些错误.但是,我们仍然记录PHP错误 - log_errors = On- 以便追踪问题.

问题:PHP似乎忽略了error_reporting它最终传递给错误日志的指令.无论输入什么值组合,文件记录都会像我设置的那样进行E_ALL.因此,我的错误日志因弃用通知而膨胀.

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

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

服务器细节:

  • Ubuntu 10.04.2 LTS
  • PHP 5.3.2

Fra*_*ehl 25

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

  • php_value
  • php_flag
  • php_admin_value
  • php_admin_flag

php_*php_admin_*版本之间的区别是这个问题的关键.使用php_admin_value和设置的值php_admin_flag只能在Apache全局和VirtualHost配置中设置; 它们不能被.htaccess或ini.set()覆盖.

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
Run Code Online (Sandbox Code Playgroud)
  1. 第一行是按位值error_reporting = E_ALL & ~E_DEPRECATED.我通过创建一个简单的脚本来检索此值:

    ini_set("error_reporting", E_ALL & ~E_DEPRECATED);
    echo ini_get("error_reporting");
    
    Run Code Online (Sandbox Code Playgroud)

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

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

  3. 第三行启用文件记录.

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

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

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

  • 谢谢你的回答.但是,`error_reporting = E_ALL&~E_DEPRECATED&~E_NOTICE`不起作用.`phpinfo()`选择正确的值(`22519`).但我的日志仍然充斥着"E_DEPRECATED".任何的想法? (4认同)