在網站開發與維護過程中,PHP內存不足錯誤(Out of memory)是許多工程師與網站管理員經常遇到的問題。本文將深入剖析造成PHP內存不足的原因,並詳細說明如何透過修改php.ini與wp-config.php中的memory_limit值來解決這類錯誤。此外,也會分享伺服器配置優化的實務經驗與建議,協助你提升網站效能、減少錯誤發生,並確保未來擴充的彈性。讀完本篇,你將能自信地處理各類PHP內存相關問題,並掌握伺服器最佳化的關鍵技巧。
文章目錄
Toggle認識PHP內存不足錯誤與成因
什麼是PHP內存不足錯誤
當PHP程式執行時,若超過了系統或PHP設定的記憶體限制(memory limit),就會出現「Allowed memory size of xxx bytes exhausted」這類錯誤訊息。這意味著執行的腳本所需的記憶體超出了所允許的最大值,導致程序異常終止。

常見成因解析
- PHP腳本處理大量資料(如大檔案上傳、批次匯入等)
- 執行複雜邏輯或無限制迴圈
- 外掛或主題程式碼存在記憶體洩漏
- 預設的memory_limit值過小
- 伺服器本身資源有限
經驗分享:在WordPress網站管理中,批量安裝或更新外掛、匯入龐大數據時最常觸發此錯誤,尤其是在預設memory_limit僅64MB的共享主機環境下。
PHP內存限制原理與設定位置說明
memory_limit的功能與重要性
memory_limit是PHP用來限制每個腳本最大可用記憶體的參數,設置得當可防止惡意或異常腳本耗盡系統資源,影響整體伺服器穩定性。然而,過低則可能導致正常功能受阻,產生各式錯誤。
memory_limit設定的優先順序
- 單一程式碼內使用
ini_set()動態調整(僅限當前執行環境) - 網站根目錄的
.htaccess(僅限Apache且允許覆寫) - 網站層級的
wp-config.php(WordPress專用) - 全域PHP設定檔
php.ini - 伺服器管理面板(如cPanel、Plesk等)
專業補充:在共享主機環境中,部分設定方式可能被主機商限制,建議先查詢主機商支援的調整方法。
判斷與診斷PHP內存不足問題
觀察錯誤訊息與日誌
- 查看網站前台或後台錯誤提示
- 檢查
error_log或伺服器日誌檔案 - 使用PHP函式
memory_get_usage()進行偵測
常見錯誤訊息樣本
Fatal error: Allowed memory size of 67108864 bytes exhausted (tried to allocate 12345 bytes) in /home/user/public_html/index.php on line 10
如何判斷該提升多少memory_limit
根據錯誤訊息中的「Allowed memory size」與「tried to allocate」可以推算出實際需求。建議每次調整以32MB或64MB為單位,逐步提升並觀察是否解決問題。
修改php.ini提升PHP內存限制
找到並編輯php.ini檔案
- 透過SSH或FTP登入伺服器
- 尋找
php.ini檔案所在位置(可利用phpinfo()查詢Loaded Configuration File) - 用編輯器打開php.ini,搜尋
memory_limit - 修改為所需值(如
memory_limit = 256M) - 儲存檔案並重啟網頁伺服器(Apache/Nginx)
實作經驗:在VPS或自管主機,直接編輯php.ini是最有效且全面的調整方式,適合多網站共用環境。
php.ini相關注意事項
- 確認修改的是正確的php.ini(CLI與Web可不同)
- 部分主機需重新啟動服務才會生效
- 避免設置過高,影響伺服器其他服務穩定性
透過wp-config.php調整WordPress專案記憶體限制
適用情境與步驟說明
在WordPress架構下,若無法直接修改php.ini,可於wp-config.php新增或編輯下列設定:
define('WP_MEMORY_LIMIT', '256M');
- 將上述程式碼加在
wp-config.php的開頭或/* That's all, stop editing! ... */上方 - 儲存後重新整理網站,檢查錯誤是否消失
- 如仍受主機限制,須聯繫主機商或改用php.ini調整
專業提示:可分別設定WP_MEMORY_LIMIT(前台)與WP_MAX_MEMORY_LIMIT(後台/管理員),提升後台操作效能。
修改wp-config.php的限制與風險
- 僅限WordPress專案適用
- 設置值不可高於php.ini的上限
- 過度提升易造成主機資源爭奪,影響其他網站
其他提升PHP內存限制的方法
利用.htaccess調整記憶體上限
php_value memory_limit 256M
- 適用Apache伺服器,需支援PHP模組模式
- 部分主機禁用此法,若出現500錯誤請移除設定
使用ini_set動態設定
ini_set('memory_limit','256M');
- 僅對當前腳本有效
- 部分主機或PHP安全設置會禁止此函式
伺服器層級的配置優化建議
評估伺服器資源配置
- 確認主機RAM容量與可用空間
- 多站/多用戶環境下,資源應分配合理
- 避免memory_limit總和超過實體RAM
常見主機環境的配置調整技巧
- 共享主機:受限於主機商設定,通常建議
128M ~ 256M - VPS/雲主機:可依需求提升至
512M以上,但須注意整體資源分配 - 專屬實體主機:依據專案規模調整,確保高效能與穩定性
權威補充:根據WordPress官方建議,最低memory_limit為64MB,建議設為256MB以應付現代網站需求。
監控與預防記憶體洩漏
- 定期檢查程式碼,避免無窮迴圈或大型物件未釋放
- 利用APM(Application Performance Monitoring)工具監控記憶體使用狀況
- 外掛選擇以知名、維護良好的為主,避免資源消耗過高
最佳實踐與進階優化策略
合理設定memory_limit的原則
- 以「夠用就好」為原則,避免預設過高
- 針對高流量、大資料量網站分階段提升
- 搭配OPcache、APCu等PHP快取機制減少記憶體壓力
針對大型網站與特殊應用的建議
- 資料匯入、批量處理可考慮分批進行或使用CLI腳本搭配高memory_limit
- 圖片處理、PDF產生等記憶體密集型任務,建議單獨設置較高的memory_limit
- 必要時將部分功能移交外部服務(如雲端圖片處理、批次API)
定期檢討與持續優化
- 每季檢查網站記憶體使用狀況與設定合理性
- 隨著流量和功能增減彈性調整memory_limit
- 備份設定檔,避免誤改導致全站崩潰
總結
PHP內存不足錯誤雖然常見,但只要掌握正確的診斷、設定與伺服器配置技巧,就能有效排除並預防問題。本文詳細說明了如何調整php.ini、wp-config.php及伺服器層級的memory_limit,並提供最佳實踐與進階優化建議。建議站長與開發者根據自身專案規模與資源狀況合理設定,並持續監控、調整,以確保網站的穩定與效能。
常見問題FAQ
- 1. 為什麼調整了memory_limit後錯誤還是沒解決?
- 可能原因包括:修改的
php.ini或wp-config.php未被正確載入、生效;主機商有額外的限制;或程式碼本身存在記憶體洩漏。 - 2. memory_limit可以設置得越高越好嗎?
- 不建議過度提升。memory_limit設過高可能導致主機資源被單一網站耗盡,影響整體穩定性,應依實際需求設定。
- 3. WordPress網站memory_limit建議設多少?
- 一般建議前台設置128M~256M,後台或需要處理大量資料時可設到512M,但視主機資源與網站規模而定。
- 4. 如何確認memory_limit已經生效?
- 可建立一個
phpinfo()測試頁,檢查memory_limit欄位是否為設定值;或於WordPress後台「健康狀態」查看伺服器資訊。 - 5. 若無法自行修改php.ini,該怎麼辦?
- 可嘗試使用
wp-config.php、.htaccess或ini_set()調整,若仍無效,需聯繫主機商協助。





