我有一个运行商业软件的生产服务器,它利用了已弃用的功能.我们已经在php.ini中禁用了错误输出display_errors = Off- 所以用户没有看到这些错误.但是,我们仍然记录PHP错误 - log_errors = On- 以便追踪问题.
问题:PHP似乎忽略了error_reporting它最终传递给错误日志的指令.无论输入什么值组合,文件记录都会像我设置的那样进行E_ALL.因此,我的错误日志因弃用通知而膨胀.
在php.ini中设置了默认时区值,因此与时区相关的问题无关紧要.
软件包的升级尚不可用,因此请不要"仅修复已弃用的代码".我正在寻找防止PHP将弃用的错误转储到日志中而不完全禁用文件日志记录的方法.
服务器细节:
Fra*_*ehl 25
当PHP作为Apache模块运行时,您可以访问/更改php.iniApache配置文件中使用指令中可用的任何配置设置.那些指令是......
php_valuephp_flagphp_admin_valuephp_admin_flagphp_*和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)
第一行是按位值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.
第二行将所有PHP错误发送到自定义日志.默认情况下,PHP将使用该syslog值,通常/var/log/apache2/error.log或类似的东西.
第三行启用文件记录.
最后一个关闭页面错误显示.
同样,优先级和操作顺序是关键.这些值取代了定义的值php.ini,同时不能被应用程序或.htaccess文件中的其他更改覆盖.
有关更改php.ini外部配置值的更多详细信息,请参阅PHP文档.