PHP內存不足錯誤(Out of Memory Error)是許多網站管理員和開發者在運行大型網站或複雜應用時常遇到的問題。當PHP程式執行時超出預設的memory_limit,就會出現內存不足的致命錯誤,導致網頁無法正常顯示或功能異常。
本文將深入解析PHP內存不足錯誤的成因與常見情境,詳細教學如何透過修改php.ini與wp-config.php來調整memory_limit,同時提供伺服器配置優化的實戰技巧。無論你是WordPress用戶、PHP開發者還是伺服器維護人員,都可學會有效排查、解決並預防此類問題,提升網站穩定性與效能。
文章目錄
Toggle認識PHP內存不足錯誤與常見觸發情境
什麼是PHP內存不足錯誤?
PHP內存不足錯誤通常表現為「Fatal error: Allowed memory size of XXX bytes exhausted」的訊息,意即目前執行的PHP腳本占用的記憶體已經超過設定的memory_limit限制。
常見出現場景
- WordPress或大型CMS網站升級、匯入/匯出大量資料時
- 運行複雜查詢、資料分析、圖片處理等高資源需求腳本時
- 外掛或自訂程式碼有記憶體洩漏或無限迴圈
- API或批次任務處理大量資料時
- 主機商預設memory_limit值過低
錯誤訊息範例
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 4096 bytes) in /path/to/script.php on line 123

深入解析PHP memory_limit設定與伺服器資源配置
什麼是memory_limit?
memory_limit是PHP執行時每個腳本可使用的最大記憶體量(包含所有分配的資料、變數、物件等)。這個設定主要用來防止單一腳本耗盡伺服器資源,預設值通常為128MB或更低,依各主機商或作業環境而異。
memory_limit與伺服器效能的關聯
- memory_limit設太低,易導致腳本執行失敗
- memory_limit設太高,可能讓惡意腳本或BUG消耗過多記憶體,影響主機穩定
- 應根據網站規模、訪客流量及功能需求合理調整
建議插入圖片:PHP內存結構示意圖,標示memory_limit、實體RAM分佈
判斷與分析PHP內存不足的根本原因
如何確認是memory_limit導致錯誤?
- 檢查錯誤訊息中「Allowed memory size of…exhausted」內容
- 查看PHP錯誤日誌(error_log)
- 使用phpinfo()檢視目前memory_limit設定
排查常見內存消耗兇手
- 外掛/模組導致記憶體洩漏
- 大型陣列、圖片或檔案處理
- 無限迴圈或重複查詢
- 不當的資料庫查詢方式
修改memory_limit的三種方法詳細教學
當排查後確認memory_limit不足,即可嘗試下述方法調高memory_limit。請根據主機權限、網站架構挑選合適方式。
方法一:透過php.ini調整memory_limit
- 找到php.ini檔案位置(通常在/etc/php/版本號/cli/php.ini或/etc/php/版本號/apache2/php.ini)
- 搜尋
memory_limit,例如:memory_limit = 256M
- 修改數值,儲存檔案
- 重新啟動Web伺服器(例如Apache、Nginx等)
注意: 虛擬主機用戶可能無權修改php.ini,請改用以下方法。

方法二:於wp-config.php中設定memory_limit(WordPress專用)
- 打開網站根目錄下的
wp-config.php - 在
/* That's all, stop editing! Happy publishing. */之前,新增或修改:define('WP_MEMORY_LIMIT', '256M'); - 儲存檔案並重新整理網站
建議插入圖片: wp-config.php檔案memory_limit設置截圖
方法三:於.htaccess單獨調整memory_limit
- 適用於Apache環境,編輯網站根目錄下的
.htaccess - 加入或修改如下:
php_value memory_limit 256M
- 儲存檔案,重新整理網站
注意: 部分主機不支援此法,若出現500錯誤請移除該行。
建議插入表格:三種memory_limit設定方式比較(欄位:方法、適用對象、優缺點、需重啟服務)
進階伺服器配置優化與持續監控
依網站規模調整適當memory_limit
- 小型/個人網站:128M~256M
- 中型網站或有大量圖片、外掛:256M~512M
- 電商、新聞、論壇或大型專案建議512M以上
具體值需根據實際負載及資源監控結果微調。
伺服器層級資源配置建議
- 確認實體RAM容量足以支撐所有PHP程序同時運作
- 調整
max_execution_time避免程序無限消耗 - 善用OPcache、Memcached等加速擴充套件
- 定期檢查慢查詢、資源耗用排行
- 針對高峰時段適時升級主機規格
案例分享:實際調整memory_limit解決網站當機
某知名媒體網站因資料庫匯入時頻繁出現「Allowed memory size exhausted」錯誤,技術團隊排查後發現原本memory_limit僅設為128M。經php.ini調高為512M並擴充主機RAM後,匯入過程順利完成,網站也未再出現記憶體不足問題。此案例顯示,調整memory_limit需搭配整體資源升級,並非單一參數調整可萬無一失。
最佳實踐與常見問題避免技巧
開發與維運階段的記憶體管理建議
- 定期檢查PHP錯誤日誌,提早發現資源異常
- 避免在程式中一次載入大量資料
- 大型檔案或資料處理採分批(batch)模式
- 善用unset釋放變數、物件
- 監控外掛/模組的記憶體消耗狀況
如何監控與預警memory_limit相關問題
- 安裝伺服器監控工具(如New Relic、Zabbix、Nagios)
- WordPress用戶可用Query Monitor等外掛掌握資源消耗
- 利用自訂腳本定期檢查PHP資源使用狀態
建議插入表格: 監控工具與功能對照表(欄位:工具名稱、支援平台、主要功能、價格)
總結與建議
PHP內存不足錯誤多源於memory_limit設定過低或程式資源管理不當。本文系統性介紹了memory_limit的原理、錯誤排查步驟、三種調整方法與伺服器層級的資源配置建議。建議網站管理員與開發者應根據自身網站規模與負載情形設定合適的memory_limit,並持續監控資源消耗,提早預防問題發生。善用上述技巧與工具,能確保網站運作穩定、用戶體驗良好。
常見問題FAQ
如何查詢目前PHP的memory_limit設定值?
可於PHP程式碼中執行phpinfo();或echo ini_get('memory_limit');查詢目前設定值,或於命令列執行php -i | grep memory_limit。
memory_limit設太高會有什麼風險?
memory_limit設太高可能讓單一腳本消耗過多記憶體,導致伺服器整體資源被搶占,影響其他網站或服務的穩定運作。
調整memory_limit後網站還是發生內存不足,該怎麼辦?
除了調高memory_limit,也需檢查是否有程式記憶體洩漏、外掛/模組異常、主機RAM不足等其他因素。建議同步優化程式邏輯與伺服器資源。
在共享虛擬主機上能修改memory_limit嗎?
多數共享主機限制用戶修改php.ini,建議優先嘗試wp-config.php或.htaccess方式;若仍無法調整,需聯繫主機商或考慮升級方案。
WordPress的WP_MEMORY_LIMIT與WP_MAX_MEMORY_LIMIT有何不同?
WP_MEMORY_LIMIT是前台常規用戶可用的記憶體上限,WP_MAX_MEMORY_LIMIT則用於後台、升級等高需求操作,建議依需求分別設置。





