跳至主要內容
問題與解答
php.ini 常用設定說明

php.ini 常用設定說明

問:
php.ini 在哪裡? 記憶體要設多少? 上傳檔案一直失敗 Session 的安全設定要開哪些?
答:

先確認設定檔在哪

php --ini

輸出會列出載入的主設定檔與額外的設定目錄。命令列與網頁環境可能使用不同的設定檔,網頁端請用 phpinfo() 確認。

使用 PHP-FPM 時,行程池的設定檔(如 www.conf)也可能覆蓋部分設定。

錯誤處理:正式與開發環境要分開

正式環境

display_errors = Off
display_startup_errors = Off
log_errors = On
error_log = /var/log/php/error.log
error_reporting = E_ALL & ~E_DEPRECATED

正式環境絕不能顯示錯誤訊息。 錯誤內容可能洩漏檔案路徑、資料庫結構等資訊,這是實際的資安風險。

開發或測試環境

display_errors = On
error_reporting = E_ALL

測試環境建議包含棄用通知,因為那是下一版的致命錯誤。

錯誤日誌的位置

error_log 未指定,錯誤可能被寫進網頁伺服器的錯誤日誌。建議明確指定路徑,並確認 PHP 執行身分有寫入權限。

記憶體與執行時間

memory_limit = 256M
max_execution_time = 60
max_input_time = 60

memory_limit 怎麼抓

  • 一般企業網站——128M 到 256M 通常足夠
  • 有圖片處理、報表匯出——可能需要更高
  • 不要無限制地調高——它是單一請求的上限,設太高會讓失控的程式吃光主機記憶體

這個值與 PHP-FPM 的 pm.max_children 互相關聯:max_children × 單一行程的實際用量,不能超過可用記憶體。

行程池的估算見網頁伺服器的效能相關設定

執行時間的注意事項

max_execution_time 不計入等待外部資源的時間(例如資料庫查詢、外部 API 呼叫)。所以有時候明明設了 30 秒,實際卻跑了更久。

長時間作業應改為背景排程,不要靠拉長逾時解決。

檔案上傳

file_uploads = On
upload_max_filesize = 32M
post_max_size = 40M
max_file_uploads = 20

三個值要一起看

  • post_max_size 必須大於 upload_max_filesize——因為除了檔案還有其他表單欄位
  • memory_limit 通常應大於 post_max_size
  • 網頁伺服器端也要調整——Nginx 的 client_max_body_size,否則會得到 413 錯誤

只改一處是最常見的錯誤,結果是改了半天上傳還是失敗。

Session

session.cookie_httponly = 1
session.cookie_secure = 1
session.cookie_samesite = "Lax"
session.use_strict_mode = 1
session.gc_maxlifetime = 1440

四個安全相關的設定

  • cookie_httponly——禁止前端程式讀取,降低被竊取的風險
  • cookie_secure——僅在加密連線傳送。全站已是 https 才能開啟,否則登入會失效
  • cookie_samesite——限制跨站傳送,降低跨站請求偽造的風險
  • use_strict_mode——拒絕未經伺服器產生的 session 編號,防止 session 固定攻擊

多台伺服器的情況

預設的 session 存在本機檔案系統。若有多台伺服器負載平衡,需改用共用的儲存機制,否則使用者會頻繁被登出。

時區與語系

date.timezone = "Asia/Taipei"

務必明確設定,否則日期時間的計算可能與預期不符——排程、訂單時間、報表都會受影響。

安全相關的設定

expose_php = Off
allow_url_fopen = Off
allow_url_include = Off
  • expose_php——關閉後回應標頭不會顯示 PHP 版本
  • allow_url_fopen——關閉可降低遠端檔案讀取的風險。但部分套件會用到,關閉前需確認
  • allow_url_include——應保持關閉,這是嚴重的風險來源

關於 disable_functions

可停用高風險的函式,例如系統指令執行相關的函式。但要先確認應用程式沒有使用到,否則會導致功能失效。

停用清單應依實際情況評估,不要照抄網路上的範例。

不同層級的設定方式

層級方式適用
全域php.ini整台伺服器
行程池FPM 設定中的 php_admin_value各站台不同設定
目錄.user.ini 或 .htaccess特定目錄
程式中ini_set()執行期間,部分設定無效

php_admin_value 設定的項目無法被程式中的 ini_set 覆蓋,適合用於安全相關的設定。

修改後要驗證

  1. 重載 PHP-FPM——systemctl reload php8.3-fpm
  2. 用 phpinfo() 確認實際生效的值——不要只相信改了設定檔
  3. 確認錯誤日誌沒有新的問題

第二項很重要——設定可能被其他層級覆蓋,或改到了不是實際載入的那個檔案。

本文的設定與語法以 PHP 8.x 為例,實際的參數、預設值與支援狀態可能因版本與發行版而異。各版本的支援時程請以 PHP 官方公告為準。套用前請先在測試環境驗證,並確實備份原設定檔。

發表於2026-08-05   更新於2026-08-20
免費諮詢 · 1 個工作天內回覆

準備好讓網站 開始幫你帶生意了嗎?

不論是要做新網站、救舊網站,還是只想先聊聊方向——先諮詢,不用先付錢,我們照實給你建議。

1 個工作天回覆免費諮詢與報價費用白紙黑字26 年找得到人
免費諮詢
免費諮詢 LINE諮詢 03-4020420 臉書傳訊
免費諮詢 LINE諮詢 03-4020420 臉書傳訊
免費諮詢
免費諮詢 LINE諮詢 03-4020420 臉書傳訊
免費諮詢 LINE諮詢 03-4020420 臉書傳訊