php中display_errors的坑

问题描述:

公司线上出现一个问题:后端的服务是nginx+php模式,php程序已经内存溢出了,但是通过nginx访问的时候,返回的还是HTTP 200 OK。

问题原因:

经过查阅资料发现,在php-fpm的运行模式下,错误信息的显示是和php的配置display_errors有关。
关于display_errors的配置有三处,分别为php-fpm.conf,php.ini以及程序里通过ini_set设置。
在php-fpm.conf里看到官方的一段解释:
在这里插入图片描述
大致意思是说:关于这类指令如果在php.ini和php-fpm.conf里同时设置了,则php-fpm.conf会覆盖php.ini里的,如果在程序中通过ini_set设置了,则以程序中的设置为主,也就是说优先级为: ini_set > php-fpm.conf > php.ini

手动验证:

下面手动测试一波:
测试脚本:

<?php
ini_set('memory_limit', '1M');
$log_info = file_get_contents('/tmp/test.log');
var_dump($log_info);

读取一个大于1M的文件,造成内存溢出错误。
然后通过 curl -x 127.0.0.1:80 http://test.com/php/testFatal.php -v 查看返回信息

测试一:

php-fpm.confphp.inistatus
onon200
onoff200
offon500
offoff500

可见,是否抛出错误信息,以php-fpm.conf里的配置为主。

测试二 :
在测试脚本中加入
ini_set(‘display_errors’,true); //始终返回的是200,无论怎样修改另外两个配置文件
ini_set(‘display_errors’,false); //始终返回的是500

总结:

1 display_errors为true时,返回给nginx的是200,display_errors为false时,返回给nginx的是500,这一点不是很理解,按理说display是显示的意思,将其打开的话,应该返回给nginx是200,关闭的话,返回给nginx的是500,现在正好相反,以后再研究吧。
2 优先级: ini_set > php-fpm.conf > php.ini

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值