修改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中。
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIkNjZwQDN0YmM4kDNvwFcvwVbvNmL1h2cuFWaq5yd3d3Lc9CX6MHc0RHaiojIsJye.jpg)
image.png
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIkNjZwQDN0YmM4kDNvwFcvwVbvNmL1h2cuFWaq5yd3d3Lc9CX6MHc0RHaiojIsJye.jpg)
image.png
5.異常情況看圖,指令行執行這個檔案,和走nginx,完全是兩個值:
5.1指令行:
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIkNjZwQDN0YmM4kDNvwFcvwVbvNmL1h2cuFWaq5yd3d3Lc9CX6MHc0RHaiojIsJye.jpg)
image.png
5.2同樣的代碼在浏覽器:
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIkNjZwQDN0YmM4kDNvwFcvwVbvNmL1h2cuFWaq5yd3d3Lc9CX6MHc0RHaiojIsJye.jpg)
image.png
6.臨時解決方法:
寶藏指令,php -d,可以指定PHP以什麼值去執行
php -d memory_limit=512M /usr/local/bin/composer install
6.1實戰如圖:
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIkNjZwQDN0YmM4kDNvwFcvwVbvNmL1h2cuFWaq5yd3d3Lc9CX6MHc0RHaiojIsJye.jpg)
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配置。