php.ini 是 PHP 的全域設定檔,控制 PHP 的 runtime 行為——記憶體上限、檔案上傳大小、最大執行時間、錯誤報告層級、時區、session 處理方式。.user.ini 是 PHP 5.3 之後支援的目錄層級覆寫機制,放在站台目錄裡可以覆寫部分 php.ini 的設定,不需要伺服器管理員權限。

概念位置

php.ini 由伺服器管理員管理,租用主機的使用者通常不能直接修改。.user.ini 是使用者層級的設定覆寫——功能上類似 .htaccess 對 Apache 的角色,但只管 PHP 設定。在 cPanel 環境裡,部分設定也可以透過「PHP 選擇器」的圖形介面調整。

可觀察訊號

PHP 行為異常時要檢查的第一個地方。常見的情境:上傳檔案失敗(upload_max_filesize 太小)、長時間運算被中斷(max_execution_time 太短)、記憶體不足錯誤(memory_limit 太低)、看不到錯誤訊息(display_errors 關閉)。用 phpinfo() 可以看到每一項設定的目前值和來源(php.ini / .user.ini / .htaccess)。

設計責任

接手維運時要知道的關鍵設定:

設定作用常見預設值接手時要確認的事
memory_limitPHP 程式的記憶體上限128M大型操作(匯出、圖片處理)是否夠用
upload_max_filesize單檔上傳大小上限2M是否符合業務需求
post_max_sizePOST 請求的總大小上限8M要大於 upload_max_filesize
max_execution_timePHP 腳本最大執行秒數30長時間操作(備份、匯入)是否需要加長
error_reporting顯示哪些層級的錯誤E_ALL開發時開到 E_ALL、production 時關 display_errors
display_errors是否在頁面上顯示錯誤Offproduction 應該關閉(錯誤寫 log 不顯示給使用者)

.user.ini 的修改不需要重啟 Apache/nginx,但有快取時間(預設 300 秒)——改完後要等最多 5 分鐘才生效。php.ini 的修改在多數環境需要重啟 web server。

鄰卡

  • .htaccess.htaccess 管 Apache 行為(URL rewrite、存取控制),.user.ini 管 PHP 行為(記憶體、執行時間),兩者互補
  • .env.env 管應用程式設定(DB 密碼、API key),php.ini 管 PHP runtime 設定(記憶體、上傳大小)