Ubuntu环境下忽略代码中ini_set("display_errors"),仅用php.ini配置
如何强制忽略代码中的
ini_set("display_errors"),仅使用php.ini的配置? 这问题我维护老项目时也踩过坑——代码里到处散着ini_set("display_errors")的调用,手动改根本不现实,给你几个靠谱的解决办法,按优先级排序:
方法1:用服务器配置强制锁定display_errors(最推荐)
不管是Apache还是Nginx+PHP-FPM,都能通过php_admin_value来设置无法被代码中的ini_set()修改的参数,这是最彻底的方案:
如果你用Apache:
在httpd.conf或者对应站点的虚拟主机配置文件里添加:
php_admin_value display_errors Off # 或者根据你php.ini想要的配置改成On
重启Apache后,代码里所有ini_set("display_errors", ...)的调用都会直接失效,系统只会用你设置的这个值。
如果你用Nginx+PHP-FPM:
找到PHP-FPM的池配置文件(通常是/etc/php/{版本}/fpm/pool.d/www.conf),添加:
php_admin_value[display_errors] = Off
重启PHP-FPM和Nginx就生效了,同样代码里的修改会被完全忽略。
方法2:自动前置脚本重置配置(备选方案)
如果没办法修改服务器配置,可以利用PHP的auto_prepend_file特性,在所有业务代码执行前加载一个脚本,把display_errors重置为php.ini的原始值:
- 创建一个脚本文件,比如
/var/www/reset_display_errors.php,内容如下:
// 重置为php.ini中配置的值 $original_value = ini_get('display_errors'); ini_set('display_errors', $original_value);
- 在php.ini里添加:
auto_prepend_file = /var/www/reset_display_errors.php
- 重启PHP服务。
⚠️ 注意:这个方法只能保证脚本执行之初是php.ini的配置,如果业务代码在后面又调用了ini_set,还是会被覆盖,所以优先级不如方法1。
不推荐的方法:禁用ini_set函数
虽然可以在php.ini里设置disable_functions = ini_set来完全禁用这个函数,但这会影响代码中所有用到ini_set的地方,可能导致其他功能异常,除非你确定系统里完全不需要ini_set,否则别用这个方案。
内容的提问来源于stack exchange,提问作者Muhammed Hafil
相关产品推荐
相关产品推荐

