修改php.ini不生效,后来发现,我修改的php.ini生效的地方是local value,在命令行不生效,但是在web请求中可以生效。
1.关于 local value 和 master value
第一个是局部值,第二个是全局值。 局部值将覆盖全局值,局部值常在 php 文件设置或者.htaccess 、.user.ini 或者其他非 php.ini 的文件中设置,而全局值在 php.ini 中或者编译时设置。 局部值优先级较高。
2.按理说,php.ini 的值应该在 master 里。全局生效,现在出现在 local 里,命令行无效,是因为命令行未加载 php.ini?(现在只能 web 请求生效。)
2.1 举例:命令行执行 php -r echo ini_get()时还是获取的 master value
2.2 举例:web 请求 a.com/a.php ,a.php 中写 ini_get(),获取的是 local value
3.环境:windows,docker,lnmp 一键环境,PHP 7.3.11 (cli) (built: Apr 6 2020 14:03:55) ( NTS )。nginx/1.16.1 。CentOS Linux release 7.7.1908 (Core)
4.phpinfo如图:
我设置的129M出现在了local value中。
image.png
image.png
5.异常情况看图,命令行执行这个文件,和走nginx,完全是两个值:
5.1命令行:
image.png
5.2同样的代码在浏览器:
image.png
6.临时解决方法:
宝藏命令,php -d,可以指定PHP以什么值去执行
php -d memory_limit=512M /usr/local/bin/composer install
6.1实战如图:
image.png
7.永久解决方法:
7.1 解决了,淦!配置有缓存,不知道缓存到哪了!!!
7.2 我在 php-fpm.conf 最后一行追加编写了 php_value[memory_limit] = 25M 后,触发了缓存更新机制,php.ini 神奇的生效了,现在 local value 和 master value 一致了。
memory_limit => 149M => 149M
8.总结
首先执行php -ini查看配置文件位置,修改php.ini不生效后查看php-fpm.conf和www.conf文件是否有覆盖操作。如果都没有,查看nginx.conf有没有相关的fastcgi配置。