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

PHP 設定檔 php.ini 完整中文詳解:語法規則、值類型、載入順序與常見陷阱

     編輯:PHP 相關知識

前言:掌握 php.ini,掌握 PHP 行為

php.ini 是 PHP 引擎啟動時的核心配置中樞。無論是調整上傳限制、開啟擴充套件、設定時區、還是微調效能參數,皆在此檔案完成。本文系統整理其語法規則、值類型、查找順序與實務陷阱,助你精準控制 PHP 行為。

檔案命名與查找順序

PHP 啟動時依序嘗試讀取下列路徑的 php.ini,首個存在者生效:

  1. 當前工作目錄 (CLI 模式下為腳本所在目錄)
  2. 環境變數 PHPRC 指定路徑
  3. 編譯時指定路徑 (Windows 下為 Windows 安裝目錄,通常 C:\Windows)

CLI 專用覆蓋:可用 php -c /path/to/php.ini 強制指定配置檔,優先級最高。

語法基礎規則

規則說明範例
註解分號 ; 開頭的行、空白行被忽略; 這是註解
區段標題[Section] 格式,目前被忽略 (保留未來用途)[PHP], [MySQL]
指令格式directive = value,指令名大小寫敏感memory_limit = 128M
字串值可加雙引號,含特殊字元時建議加引號error_log = "/var/log/php/error.log"

值類型完整分類

類型合法值範例說明
字串"foo", bar一般文字,含空格/特殊字元建議加引號
數字128, 3.14整數/浮點數
PHP 常數E_ALL, M_PI編譯時期常數,動態擴充套件常數需在 extension= 行之後使用
INI 常數On, Off, True, False, Yes, No, None不分大小寫
布林真值1, On, True, Yes開啟功能
布林偽值0, Off, False, No關閉功能
空字串foo =, foo = None等號後空白或 None (不加引號)
字串 "none"foo = "none"加引號則為實際字串 "none"
表達式E_ALL & ~E_NOTICE僅支援位運算 | & ~ ! 與括號

關鍵陷阱:動態擴充套件常數的載入順序

鐵律:若指令值使用某擴充套件定義的常數 (如 CURL_HTTP_VERSION_2_0),該指令必須寫在對應 extension=curl 載入行之後。否則啟動時常數未定義,導致解析錯誤或值為 0。

; ❌ 錯誤順序
curl.cainfo = "/etc/ssl/certs/ca-bundle.crt"
extension=curl

; ✅ 正確順序
extension=curl
curl.cainfo = "/etc/ssl/certs/ca-bundle.crt"

預設值與 php.ini-dist

php.ini-dist (或 php.ini-development/php.ini-production) 內的所有設定值即為 PHP 內建預設值。若刪除該檔或註解特定行,PHP 將以內建預設值運行,行為一致。

INI 表達式運算符詳解

運算符功能範例結果
|位元 ORE_ERROR | E_WARNING合併錯誤報告等級
&位元 ANDE_ALL & ~E_NOTICE排除 NOTICE
~位元 NOT~E_DEPRECATED取反
!布林 NOT!On等同 Off

實務高頻配置速查表

指令建議值用途
date.timezone"Asia/Taipei" / "PRC"消除 8 小時時差,生產環境必設
memory_limit256M 或更高防止大腳本 OOM,視業務調整
max_execution_time30 (Web) / 0 (CLI)防止死循環佔用資源
upload_max_filesize20M配合 post_max_size 設定
post_max_size25M需大於 upload_max_filesize
error_reportingE_ALL & ~E_DEPRECATED & ~E_STRICT生產環境建議
display_errorsOff生產環境關閉,改用 log
log_errorsOn啟用錯誤日誌
error_log/var/log/php/error.log指定日誌路徑,需寫入權限
session.save_path/var/lib/php/sessions確保目錄存在且權限正確

修改生效方式

  • PHP-FPM / Apache mod_php:必須重啟服務 (systemctl reload php-fpm / apache2)
  • CLI 腳本:下次執行自動讀取新配置
  • .user.ini (PHP 5.3+,僅 CGI/FastCGI):目錄級配置,掃描間隔由 user_ini.cache_ttl 控制 (預設 300 秒)

驗證配置生效

總結

php.ini 雖為純文字檔,其語法規則、值類型、載入順序、常數依賴關係卻暗藏玄機。掌握「查找順序 > 語法規則 > 值類型 > 載入順序」四大核心,配合 php -i、phpinfo() 驗證,即能精準調校 PHP 行為,避免「明明改了配置卻不生效」的經典困擾。

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