php.ini,PHP 啟動時按順序查找:PHPIniDir (Apache) → PHPRC 環境變量 → 編譯時指定路徑 → C:\Windows (Windows) → 當前工作目錄。; 為註釋,`[Section]` 為分組標識(僅供可讀性,無功能性)。directive = value,值可為字符串、數字、常量(E_ALL)、布爾值(On/Off/1/0)、表達式(E_ALL & ~E_NOTICE)。On/True/Yes/1 為開啟,Off/False/No/0 為關閉。| 指令 | 默認 | 推薦值 | 說明 |
|---|---|---|---|
| engine | On | On | 啟用 PHP 腳本引擎,關閉則不解析 .php 文件 |
| short_open_tag | On | Off | 禁用 <? ?> 短標籤,防止與 XML 聲明衝突,統一用 <?php |
| asp_tags | Off | Off | ASP 風格標籤 <% %>,已移除於 PHP 7 |
| precision | 14 | 14 | 浮點數顯示精度(位數) |
| y2k_compliance | Off | On | 強制年份四位數輸出,避免 Y2K 問題 |
| 指令 | 默認 | 推薦值 | 說明 |
|---|---|---|---|
| output_buffering | Off | 4096 | 開啟輸出緩衝(字節數),允許在輸出後發送 header/setcookie,提升輸出性能 |
| output_handler | 空 | ob_gzhandler | 自動 GZIP 壓縮輸出(需瀏覽器支援),或留空由應用層控制 |
| implicit_flush | Off | Off | 每次輸出自動 flush,僅調試時開啟,生產環境嚴重損害性能 |
| 指令 | 默認 | 推薦值 | 說明 |
|---|---|---|---|
| expose_php | On | Off | 隱藏 HTTP Header 中的 X-Powered-By: PHP/x.y.z,降低信息洩露 |
| allow_call_time_pass_reference | On | Off | 強制按引用傳參已棄用,PHP 5.4+ 移除,代碼應在函數聲明處用 &$var |
| safe_mode | Off | Off | 安全模式已移除於 PHP 5.4,改用 open_basedir、disable_functions |
| disable_functions | 空 | exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source,pcntl_exec | 禁用高危函數,防止代碼執行漏洞利用 |
| disable_classes | 空 | 空 | 禁用特定類(罕用) |
| open_basedir | 空 | /var/www/:/tmp/:/usr/share/php/ | 限制腳本可訪問的目錄樹,防止目錄遍歷攻擊 |
| 指令 | 默認 | 推薦值 | 說明 |
|---|---|---|---|
| max_execution_time | 30 | 30-60 | 腳本最大執行秒數,0 為無限制(CLI 默認 0) |
| max_input_time | 60 | 60 | 解析 POST/GET/文件上傳數據的最大秒數 |
| memory_limit | 128M | 256M-512M | 單腳本最大內存,視業務複雜度調整 |
| post_max_size | 8M | 20M | POST 數據最大體積,必須 ≥ upload_max_filesize |
| upload_max_filesize | 2M | 20M | 單文件上傳上限 |
| max_file_uploads | 20 | 20 | 單次請求最大文件數 |
| 指令 | 默認 | 推薦值 | 說明 |
|---|---|---|---|
| error_reporting | E_ALL & ~E_NOTICE & ~E_DEPRECATED | E_ALL | 開發環境 E_ALL,生產環境 E_ALL & ~E_NOTICE & ~E_DEPRECATED & ~E_STRICT |
| display_errors | On | Off | 生產環境關閉,防止敏感信息洩露給用戶 |
| display_startup_errors | Off | Off | 啟動階段錯誤不顯示 |
| log_errors | Off | On | 啟用錯誤日誌寫入 |
| error_log | 空 | /var/log/php/error.log | 錯誤日誌絕對路徑,需 PHP 進程可寫 |
| error_log_max_len | 1024 | 4096 | 單條日誌最大長度,0 為不限制 |
| ignore_repeated_errors | Off | On | 忽略重複錯誤,減少日誌噪音 |
| 指令 | 默認 | 推薦值 | 說明 |
|---|---|---|---|
| session.save_handler | files | redis | 分布式部署需用 Redis/Memcached,單機可用 files |
| session.save_path | /tmp | /var/lib/php/sessions | 文件存儲路徑,或 tcp://127.0.0.1:6379 |
| session.gc_maxlifetime | 1440 | 7200 | 會話垃圾回收最大生存秒數(2小時) |
| session.cookie_httponly | Off | On | 防止 JS 讀取 Session ID,緩解 XSS |
| session.cookie_secure | Off | On (HTTPS) | 僅 HTTPS 傳輸 Cookie |
| session.use_strict_mode | Off | On | 嚴格模式拒絕未初始化的 Session ID |
; 動態擴展
extension=pdo_mysql
extension=redis
extension=opcache
extension=gd
extension=intl
; Zend 擴展
zend_extension=opcache
| 指令 | 推薦值 | 說明 |
|---|---|---|
| opcache.enable | 1 | 啟用字節碼緩存 |
| opcache.memory_consumption | 256 | 共享內存大小 |
| opcache.interned_strings_buffer | 16 | 駐留字符串緩存 |
| opcache.max_accelerated_files | 20000 | 最大緩存文件數 |
| opcache.revalidate_freq | 60 | 檢查文件更新間隔(秒),0 為每次檢查 |
| opcache.fast_shutdown | 1 | 快速關閉序列化 |
.user.ini(FPM/CLI 支援)覆蓋目錄級配置。php.ini。php.ini-production、php.ini-development 兩份模板,部署時複製對應版本。php.ini 影響 PHP 運行的方方面面。生產環境核心原則:關閉顯示錯誤、開啟日誌、隱藏版本、禁用高危函數、限制目錄、啟用 OPcache、調大內存與上傳限制、嚴格會話配置。定期審查配置,隨 PHP 版本更新調整棄用指令。