问题描述
- 针对不同环境,不同执行方式。ini_set('memory', 'xxxM')表现不同
- web controller返回false,命令行(console controller)成功设置
- 线下本机,web和console形式都生效,但放到线上web controller设置失败
- ini_get('memory')在web controller环境始终等于一个固定值
- 报错为php报错,不是nginx报错
问题分析
- 排除代码问题,因为在测试环境执行都成功
- 定性为配置问题,排除php.ini的safe_model 没打开
- 定位在web组件的配置上,因为命令行执行为成功。测试环境执行也成功。唯独线上的web controller执行错误
- 确定配置问题为nginx配置,php-fpm配置。目前我们组的php wb项目的部署容器为 nginx + php-fpm
- 根据报错返回为php_error,排除了nginx的配置问题
解决方法
修改配置文件
vi /home/work/app/php/etc/php-fpm.conf :
php_admin_value[memory_limit] = xxxM
重启php-fpm即可解决,当然线上负载机器多台,请提工单让sre处理
举一反三
针对设置php.ini,web请求和预期不符,此时应该心里面想到php-fpm配置会覆盖php.ini的配置,console controller php-fpm配置
比如
- 前端上传文件大小在php.ini改完之后不生效
- ....