在網站開發與維運過程中,PHP內存不足錯誤(Out of memory)是許多開發者與站長常遇到的棘手問題。這類錯誤不僅會導致網站功能異常、速度變慢,甚至讓整個網站無法正常運作。本文將帶領你深入了解PHP內存不足錯誤產生的原因,並提供完整的解決方案。你將學會如何正確修改php.ini或wp-config.php中的memory_limit值,並結合伺服器配置的優化技巧,從根本改善網站效能與穩定性。無論是WordPress使用者還是自行架設PHP專案的工程師,都能從這篇文章獲得實用的知識、操作指引與進階優化建議。
文章目錄
TogglePHP內存不足錯誤的成因與常見情境
什麼是PHP內存不足錯誤
PHP內存不足錯誤,通常會顯示為「Allowed memory size of xxx bytes exhausted」或「Fatal error: Allowed memory size of xxx bytes exhausted」。這表示PHP執行腳本時,所需的記憶體超出了預設值或設定限制,造成程式中斷。
常見導致內存不足的情境
- 運算過於複雜,單一腳本需處理大量資料(如匯入、匯出、圖片處理)
- 外掛或第三方程式碼存在記憶體洩漏(memory leak)
- WordPress等CMS在升級、備份或批次作業時
- 伺服器預設memory_limit過低
- 與主機商資源限制相關(共用主機環境更常見)
圖片建議:插入一張顯示PHP內存不足錯誤訊息的截圖,幫助讀者辨識問題。
memory_limit的概念與重要性
memory_limit是PHP用來限制單一腳本執行時可使用的最大記憶體量。此設定用來避免惡意腳本或錯誤程式碼佔用過多資源,影響伺服器運作。然而,若設定過低,正常應用也會無法順利運作。因此,依據實際需求調整memory_limit,是維護網站穩定性與安全性的關鍵。
| 設定值 | 適用情境 | 優缺點說明 |
|---|---|---|
| 32M | 基本靜態網站 | 資源消耗最低,功能有限 |
| 64M | 一般部落格、輕量級CMS | 大部分小型網站適用 |
| 128M | 中等流量WordPress、電商網站 | 可支援更多外掛與功能 |
| 256M ~ 512M | 大型網站、批次處理、多媒體處理 | 效能最佳,但需注意主機總資源 |
判斷與分析PHP內存不足錯誤
如何辨識錯誤訊息
- 觀察網站前台/後台是否出現「Fatal error: Allowed memory size…」提示
- 檢查伺服器error_log或PHP error log,尋找memory exhausted相關紀錄
- 部分框架或CMS會於管理頁面顯示記憶體相關警告
案例分享:常見發生場景
以WordPress為例,常見在安裝大型外掛、匯入樣板或升級時出現內存不足錯誤。另一種情境,為自建PHP系統在處理大量Excel匯入時,若每筆資料佔用記憶體過多,便容易觸發memory_limit限制,導致執行失敗。
圖片建議:插入WordPress升級時出現memory_limit錯誤的畫面。
善用監控工具協助診斷
- phpinfo(): 可查詢當前memory_limit設定
- NewRelic、Datadog等APM工具:追蹤實際記憶體用量
- top/htop(Linux指令):觀察整體伺服器記憶體使用狀況

如何修改php.ini中的memory_limit
步驟一:找到php.ini檔案
- 使用
php --ini查詢php.ini路徑 - 共用主機可於cPanel的「Select PHP Version」或「MultiPHP INI Editor」中設定
- VPS或獨立主機多位於
/etc/php/版本號/apache2/php.ini或/etc/php/版本號/cli/php.ini
步驟二:編輯memory_limit參數
memory_limit = 256M
建議設定值視網站規模、功能而定。一般WordPress建議128M以上,若有大量數據處理則適度提高。
步驟三:重啟Web服務
- Apache:
sudo systemctl restart apache2 - Nginx + PHP-FPM:
sudo systemctl restart php7.x-fpm(依版本調整)
經驗分享
實務上,許多新手常忽略重啟服務這一步,導致php.ini修改未生效,建議修改後立即測試memory_limit是否提升。
圖片建議:php.ini設定畫面截圖。
在wp-config.php中調整WordPress的memory_limit
為什麼在wp-config.php單獨設定memory_limit
部分共用主機無法直接編輯php.ini,且WordPress允許透過wp-config.php為單一網站調整記憶體限制。這對多站共用同一主機時尤為重要,能避免全站過度佔用資源。
設定方式與範例
define('WP_MEMORY_LIMIT', '256M');
- 將上述程式碼貼於wp-config.php內
/* That's all, stop editing! Happy blogging. */之前 - 若需提升後台管理記憶體,可加入
define('WP_MAX_MEMORY_LIMIT', '512M');
注意事項與限制
- wp-config.php設定值無法超過主機php.ini的最大值
- 部分主機環境需同步調整php.ini才能生效
經驗案例
某次協助客戶解決WooCommerce批量上架商品時的記憶體錯誤,僅調整wp-config.php無效,最後聯繫主機商協助提升php.ini總額度,問題才順利排除。
圖片建議:wp-config.php內記憶體設定範例截圖。
其他調整PHP內存的方法
使用.htaccess或user.ini局部調整
- .htaccess(僅支援Apache):
php_value memory_limit 256M(需主機支援) - .user.ini(適用於PHP-FPM或共用主機):
memory_limit = 256M
程式碼內動態調整(僅供除錯,勿長期使用)
ini_set('memory_limit', '512M');
僅於特定腳本內部短暫需求時使用,勿依賴於生產環境。
伺服器層級的記憶體配置優化建議
檢查主機總記憶體與資源分配
- 使用
free -h或top觀察總RAM與PHP佔用狀況 - 確保memory_limit總合不超過實體RAM,避免swap與過載
PHP-FPM與多工環境調整
- 調整
pm.max_children,避免同時執行過多PHP處理序(process) - 適度分流前台/後台資源,避免高峰流量衝擊整體效能
主機商資源限制與升級建議
- 共用主機資源有限,遇頻繁memory_limit錯誤建議升級VPS或雲端主機
- 選擇主機時,確認支援自訂php.ini、.user.ini等彈性設定
| 主機類型 | 彈性設定能力 | 適用網站規模 | 預估費用 |
|---|---|---|---|
| 共用主機 | 低 | 小型、初學者 | 低 |
| VPS | 中高 | 中大型網站 | 中 |
| 雲端主機 | 高 | 成長型、企業級 | 中高 |
| 專屬主機 | 最高 | 大型企業、特殊需求 | 高 |
圖片建議
插入一張伺服器監控(例如htop、Zabbix、NewRelic)運作中的畫面,輔助說明記憶體分配狀態。
優化PHP程式以減少內存消耗
常見導致記憶體暴增的程式設計疏失
- 未釋放資源(如未關閉資料庫連線、檔案指標)
- 處理大檔案時一次性全部載入(建議分段stream處理)
- 過度使用全域變數或session資料
- 資料結構設計不良,陣列/物件過於龐大
程式面優化技巧
- 善用unset()釋放不再需要的變數
- 大批量資料分段處理(分頁、chunk、stream)
- 定期檢查外掛與函式庫,移除未用或造成資源浪費者
- 利用Xdebug、Blackfire等工具進行效能分析
經驗案例
某次協助客戶重構舊有PHP後台,僅將批次匯入程式改為每1000筆資料寫入一次資料庫,記憶體消耗下降80%,大幅減少內存不足問題。
圖片建議:插入Xdebug記憶體分析報告截圖。
WordPress系統專屬的優化建議
管理外掛與佈景主題資源
- 定期檢查並移除未啟用外掛/主題
- 避免同時啟用多個功能重疊外掛(如快取、SEO)
- 更新外掛、主題與WordPress核心,減少資源洩漏
善用快取與CDN減少伺服器負擔
- 啟用物件快取(如Redis、Memcached)
- 部署靜態快取外掛(如WP Super Cache、W3 Total Cache)
- 使用CDN分擔靜態資源流量
圖片建議
插入WordPress快取外掛設定畫面,展示快取設定如何減少記憶體壓力。
常見問題與疑難排解流程
排查步驟總結
- 確認錯誤訊息內容與記憶體限制
- 檢查php.ini及網站本身設定(如wp-config.php)
- 觀察主機資源總量,有無其他應用佔用大量記憶體
- 檢查程式碼有無記憶體洩漏或外掛衝突
- 必要時聯繫主機商諮詢配額或升級方案
常見誤區與錯誤操作
- 誤以為提升memory_limit即可解決所有效能問題,忽略程式本身優化
- 未根據實際主機RAM合理分配memory_limit,導致系統不穩
- 修改php.ini後忘記重啟Web服務或快取,導致設定未生效
總結與最佳實踐建議
- 適度提升memory_limit,並確保與主機資源匹配
- 定期檢查外掛、程式碼品質,避免記憶體洩漏
- 善用監控工具,隨時掌握資源消耗狀況
- 遇頻繁memory_limit錯誤,考慮升級主機方案或雲端架構
只要循序漸進地分析問題、優化配置,PHP內存不足錯誤絕大多數都能有效排除,讓你的網站運行更安全、快速且穩定。
權威性建議:本網站擁有多年PHP與WordPress架站經驗,專為企業、中小型網站提供技術諮詢與效能優化服務,歡迎聯繫取得專業協助。
圖片建議:插入一張網站效能提升前後的比較圖。
FAQ
- Q1:我已經在wp-config.php提升memory_limit,但錯誤依然存在,怎麼辦?
- 這可能是主機php.ini的memory_limit仍低於你在wp-config.php設定的值,建議向主機商確認或調整伺服器層級的memory_limit。
- Q2:memory_limit設太高會有什麼風險?
- memory_limit設過高可能導致單一腳本佔用過多資源,造成伺服器過載,甚至影響其他網站或應用服務的穩定性。務必根據實體RAM合理分配。
- Q3:如何快速檢查當前網站的memory_limit設定值?
-
可建立一個包含
<?php phpinfo(); ?>的PHP檔案,上傳至網站並瀏覽,即可查詢當前的memory_limit與其他PHP設定。 - Q4:共用主機無法調整php.ini怎麼辦?
- 可嘗試使用.user.ini或wp-config.php調整,但若主機商有嚴格限制,建議考慮升級VPS或雲端主機以獲得更高彈性。
- Q5:提升memory_limit後,仍然遇到效能瓶頸怎麼解決?
- 需進一步檢查程式碼是否存在資源浪費、外掛衝突、資料處理不當等問題,並考慮啟用快取、優化資料庫或升級主機資源。





