首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

解決修改 php.ini 不生效的終極指南:權限、多配置與生效路徑排查

     編輯:PHP 相關知識

現象描述

上傳大文件需調整 upload_max_filesize、post_max_size 等參數,修改 php.ini 並重啟 Apache/Nginx 後仍不生效,phpinfo() 顯示的值仍是舊值。

核心排查步驟

1. 確認真正生效的配置文件路徑

# 命令行查看
php --ini
# 或腳本中
phpinfo(); // 尋找 "Loaded Configuration File"

不要憑感覺修改 /etc/php.ini,可能實際讀取的是 /usr/local/php/etc/php.ini 或 FPM 專用配置。

2. 檢查運行用戶權限

若 PHP 以 nobody、www-data、php-fpm 等低權限用戶運行,而 php.ini 屬主為 root 且權限為 644,雖然可讀,但某些情況下(如 PHP-FPM 以 root 啟動再切換用戶)可能導致讀取異常。

# 查看進程用戶
ps aux | grep php-fpm
# 修正權限
chown www-data:www-data /path/to/php.ini
chmod 644 /path/to/php.ini

3. 多份配置文件干擾

常見場景:

  • 系統安裝 PHP 產生 /etc/php/7.4/fpm/php.ini
  • 編譯安裝產生 /usr/local/php/etc/php.ini
  • Docker 容器內另一份

解決:以 php --ini 或 phpinfo() 為準,只修改該文件。

4. 重啟正確的服務進程

# PHP-FPM
systemctl restart php7.4-fpm
# 或
service php-fpm restart

# Apache 模塊模式
systemctl restart apache2

# Nginx + PHP-FPM 需重啟 PHP-FPM,Nginx 僅轉發

5. 驗證生效

<?php
echo ini_get('upload_max_filesize'); // 應輸出新值
var_dump(ini_get('post_max_size'));

進階:運行時動態修改(不推薦生產環境)

ini_set('upload_max_filesize', '100M');
ini_set('post_max_size', '100M');
// 注意:部分核心參數(如 memory_limit)在腳本啟動後不可改

總結檢查清單

  1. 用 php --ini 定位 Loaded Configuration File
  2. 修改該文件,確保語法正確(分號註釋、無拼寫錯誤)
  3. 確認文件屬主/權限與 PHP 運行用戶一致
  4. 重啟對應的 PHP 進程(FPM/Apache 模塊)
  5. 用 phpinfo() 或 ini_get() 驗證

按照以上步驟操作,99% 的「修改不生效」問題都能解決。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved