php.ini 是 PHP 引擎啟動時的核心配置中樞。無論是調整上傳限制、開啟擴充套件、設定時區、還是微調效能參數,皆在此檔案完成。本文系統整理其語法規則、值類型、查找順序與實務陷阱,助你精準控制 PHP 行為。
PHP 啟動時依序嘗試讀取下列路徑的 php.ini,首個存在者生效:
PHPRC 指定路徑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-development/php.ini-production) 內的所有設定值即為 PHP 內建預設值。若刪除該檔或註解特定行,PHP 將以內建預設值運行,行為一致。
| 運算符 | 功能 | 範例 | 結果 |
|---|---|---|---|
| | 位元 OR | E_ERROR | E_WARNING | 合併錯誤報告等級 |
& | 位元 AND | E_ALL & ~E_NOTICE | 排除 NOTICE |
~ | 位元 NOT | ~E_DEPRECATED | 取反 |
! | 布林 NOT | !On | 等同 Off |
| 指令 | 建議值 | 用途 |
|---|---|---|
date.timezone | "Asia/Taipei" / "PRC" | 消除 8 小時時差,生產環境必設 |
memory_limit | 256M 或更高 | 防止大腳本 OOM,視業務調整 |
max_execution_time | 30 (Web) / 0 (CLI) | 防止死循環佔用資源 |
upload_max_filesize | 20M | 配合 post_max_size 設定 |
post_max_size | 25M | 需大於 upload_max_filesize |
error_reporting | E_ALL & ~E_DEPRECATED & ~E_STRICT | 生產環境建議 |
display_errors | Off | 生產環境關閉,改用 log |
log_errors | On | 啟用錯誤日誌 |
error_log | /var/log/php/error.log | 指定日誌路徑,需寫入權限 |
session.save_path | /var/lib/php/sessions | 確保目錄存在且權限正確 |
user_ini.cache_ttl 控制 (預設 300 秒)
php.ini 雖為純文字檔,其語法規則、值類型、載入順序、常數依賴關係卻暗藏玄機。掌握「查找順序 > 語法規則 > 值類型 > 載入順序」四大核心,配合 php -i、phpinfo() 驗證,即能精準調校 PHP 行為,避免「明明改了配置卻不生效」的經典困擾。