php.ini 語法基礎
- 空白行與分號
; 開頭的行會被忽略
- 區塊標題如
[PHP] 僅作分組,不影響解析
- 指令格式:
directive = value,指令名區分大小寫
- 值類型:字串(引號)、數字、PHP 常數、INI 常數(On/Off/none)、表達式(位運算
| & ~、邏輯非 !、括號)
- 布林值:
On 啟用、Off 關閉
- 空字串:
foo = 或 foo = none;foo = "none" 為字串 "none"
- 動態擴展常數需在
extension= 指令之後使用
在 httpd.conf 中覆蓋設定
| 指令 | 用途 |
php_value name value | 設定非布林指令,value=none 清除先前設定 |
php_flag name on|off | 僅用於布林指令 |
PHP 常數(如 E_ALL)僅能在 php.ini 使用,httpd.conf 必須用對應掩碼值。標註 SYS 的指令僅能在 httpd.conf 全域區段使用。
核心配置區塊摘要
[Apache] 模組專用
| 指令 | 預設 | 說明 |
| child_terminate | Off | 腳本結束後是否允許 apache_child_terminate() 終止子進程(僅 Unix + Apache 1.3) |
| engine | On | 啟用 PHP 解析引擎,可在 httpd.conf 依目錄/虛擬主機切換 |
| last_modified | Off | 在 Last-Modified 標頭放入腳本最後修改時間 |
| xbithack | Off | 無視副檔名,將可執行位元視為 PHP 腳本 |
[PHP-Core-DateTime] 日期時間
| 指令 | 預設 | 說明 |
| date.default_latitude | 31.7667 | 預設緯度(供 date_sunrise/sunset) |
| date.default_longitude | 35.2333 | 預設經度 |
| date.sunrise_zenith | 90.583333 | 日出天頂角 |
| date.sunset_zenith | 90.583333 | 日落天頂角 |
| date.timezone | (空) | 未設 TZ 環境變數時的預設時區。中國大陸建議 PRC。優先序:date_default_timezone_set() > TZ env > 此指令 > PHP 推測 > UTC |
[PHP-Core-Assert] 斷言
| 指令 | 預設 | 說明 |
| assert.active | On | 啟用 assert() 評估 |
| assert.bail | Off | 失敗時中止腳本 |
| assert.callback | (空) | 失敗時回調函數 |
| assert.quiet_eval | Off | 安靜評估(相當 error_reporting=0) |
| assert.warning | On | 每個失敗發出警告 |
[PHP-Core-SafeMode] 安全模式(PHP 6 已移除)
安全模式試圖在 PHP 層解決共享主機安全,結構上不合理。PHP 6 改用 open_basedir 方案。以下指令在 PHP 6 已刪除。
| 指令 | 預設 | 說明 |
| safe_mode | Off | 啟用安全模式,檢查腳本擁有者與操作檔案擁有者是否一致 |
| safe_mode_gid | Off | 改用 GID 比較而非 UID |
| safe_mode_allowed_env_vars | PHP_ | 允許修改的環境變數前綴(逗號分隔) |
| safe_mode_protected_env_vars | LD_LIBRARY_PATH | 禁止修改的環境變數 |
| safe_mode_exec_dir | /usr/local/php/bin | 安全模式下允許執行的系統程式目錄 |
| safe_mode_include_dir | (空) | 包含檔案時跳過 UID/GID 檢查的目錄(冒號/分號分隔) |
[PHP-Core-Safe] 安全相關
| 指令 | 預設 | 說明 |
| allow_url_fopen | On | 允許 fopen() 等打開遠端檔案 |
| allow_url_include | Off | 允許 include/require 遠端檔案 |
| disable_classes | (空) | 禁用的類名列表(逗號分隔) |
| disable_functions | (空) | 禁用的函數名列表(逗號分隔) |
| enable_dl | On | 允許 dl() 動態載入擴展(PHP 6 移除) |
| expose_php | On | 在 HTTP 標頭暴露 PHP 版本資訊 |
| open_basedir | (空) | 限制 PHP 可操作的目錄樹(前綴匹配,建議結尾加斜線) |
| sql.safe_mode | Off | 資料庫連線函數使用預設值而非參數 |
[PHP-Core-Error] 錯誤報告
| 指令 | 預設 | 說明 |
| error_reporting | E_ALL & ~E_NOTICE | 錯誤等級位欄位疊加。建議 E_ALL | E_STRICT |
| display_errors | On | 錯誤輸出到畫面。生產環境強烈建議 Off,改用錯誤日誌 |
| display_startup_errors | Off | 啟動階段錯誤是否顯示 |
| log_errors | Off | 記錄錯誤到日誌檔(生產環境建議 On) |
| error_log | (空) | 錯誤日誌路徑,或 syslog |
| html_errors | On | 錯誤訊息含 HTML 標記(生產環境建議 Off) |
| track_errors | Off | 將最近錯誤存入 $php_errormsg |
[PHP-Core-Logging] 日誌
| 指令 | 預設 | 說明 |
| define_syslog_variables | Off | 定義系統日誌變數($LOG_PID 等),關閉以提升效能 |
| log_errors_max_len | 1024 | 日誌單行最大長度,0 為無限制 |
| ignore_repeated_errors | Off | 忽略重複錯誤訊息(同檔同行) |
| ignore_repeated_source | Off | 忽略重複錯誤來源 |
本文為第 1/3 頁,後續將涵蓋檔案上傳、資料庫、Session、擴展模組等配置區塊。