在使用PHP開發網站或應用程式時,經常會遇到「內存不足」的錯誤訊息(如:Allowed memory size exhausted)。這不僅影響網站的正常運作,還可能降低用戶體驗。本文將帶您深入了解PHP內存不足的各種成因,並提供多種實用的解決方案,包含如何正確修改php.ini或wp-config.php中的memory_limit值,同時分享伺服器配置優化的實戰技巧。閱讀本文後,您將能有效排除內存不足的問題,進一步提升網站的效能與穩定性。
文章目錄
Toggle常見的PHP內存不足錯誤與其影響
什麼是PHP內存不足錯誤
PHP內存不足錯誤全名為「Allowed memory size of xxx bytes exhausted」,這是當PHP執行程式時所需記憶體超過當前配置的memory_limit造成的。常見錯誤訊息如下:
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 123456 bytes) in /path/to/script.php on line 123
這類錯誤會導致網站頁面無法正常載入,甚至完全中斷服務,對SEO與用戶信任度造成嚴重影響。
導致PHP內存不足的常見原因
- 網站流量激增,導致同時執行的PHP請求大幅增加
- 程式碼記憶體管理不善,如無窮迴圈、未釋放大型變數
- 處理大型檔案或資料(如批次上傳、匯出/匯入作業)
- 第三方外掛或函式庫消耗過多記憶體
- 伺服器硬體資源本身不足
如何診斷PHP內存不足問題
檢查錯誤日誌
首先應檢查伺服器的PHP錯誤日誌(通常位於 /var/log/php_errors.log 或 error_log),找出內存不足相關訊息及對應的程式碼行數。
使用phpinfo()檢查當前memory_limit
利用 phpinfo() 函數建立一個測試檔案,檢視目前PHP的記憶體限制設定。
<?php phpinfo(); ?>
建議插入phpinfo頁面截圖,標註memory_limit位置。(圖片建議:phpinfo()頁面中memory_limit設定值標註圖)
監控伺服器資源
- Linux可用
top、htop觀察記憶體使用狀況 - 可用
free -m監控實體記憶體 - 雲端主機多提供資源監控面板(如AWS CloudWatch、GCP Monitoring)
解決PHP內存不足的實用方案
調整PHP memory_limit設置
PHP內存限制可在多個層級進行設置,建議先瞭解各設定對應的優先順序與適用場景。下方表格整理各設定方式的比較與建議(表格插入建議:設定方式、適用範圍、優先順序、修改難易度)。
修改php.ini檔案
- 找到伺服器中的php.ini位置,可透過
php --ini或phpinfo()查詢 - 編輯php.ini,尋找
memory_limit行 - 增加記憶體限制(如:
memory_limit = 256M) - 儲存後重啟Web Server(Apache、Nginx或PHP-FPM)
memory_limit = 256M
圖片建議:php.ini檔案編輯畫面,標示memory_limit調整前後。
注意事項
- 共享主機用戶可能無權限修改php.ini,可考慮下列其他方法
- 調整過大可能讓單一請求耗盡所有伺服器資源,應依實際需求設定
使用.htaccess或.user.ini局部調整
若無法編輯全域php.ini,可於專案目錄下加入 .htaccess 或 .user.ini 檔案(依伺服器支援而定):
php_value memory_limit 256M
注意:僅適用於Apache伺服器,Nginx需於fastcgi_params設置。
; .user.ini用法(多數共享主機支援) memory_limit = 256M
WordPress專案修改wp-config.php內存限制
WordPress用戶可直接於 wp-config.php 增加或修改內存上限,範例如下:
define('WP_MEMORY_LIMIT', '256M');
define('WP_MAX_MEMORY_LIMIT', '512M');
WP_MEMORY_LIMIT:前台與一般後台頁面記憶體上限WP_MAX_MEMORY_LIMIT:後台某些運算(如匯入、升級)專用最大上限
圖片建議:wp-config.php插入memory_limit設定之範例截圖。
變更後須知
- 部份主機商會限制最高可設定值,若無效需聯絡主機商確認
- 建議同步檢查外掛、佈景主題是否有額外記憶體需求
程式碼層級調整:ini_set動態設定
可於PHP程式開頭使用 ini_set('memory_limit', '256M'); 臨時修改本次請求的內存上限。
ini_set('memory_limit', '256M');
注意:部份主機已禁用此函數,且僅限於此份檔案執行期間有效。
伺服器配置優化與資源管理實務
評估適當的memory_limit值
memory_limit設定過低會導致程式頻繁中斷,但過高則可能讓單一請求壟斷過多資源。建議依據以下情境調整(表格插入建議:網站規模、建議memory_limit、常見適用情境):
記憶體優化與垃圾回收建議
- 避免不必要的全域變數與陣列佔用大量記憶體
- 大型查詢建議分批讀取(如使用分頁,或PDO的fetch方式)
- 手動釋放物件與unset不用變數
- 善用PHP垃圾回收機制
gc_collect_cycles()
經驗分享:曾遇客戶網站因圖片批次匯入,memory_limit不足導致匯入中斷,後續調高memory_limit並優化程式分批匯入,成功解決。
監控與主動警示
- 部署APM(如New Relic、Datadog)監控PHP記憶體使用情形
- 定期檢查錯誤日誌,及早發現異常
- 設置資源超限警示,可用Shell Script或監控服務自動通知
提升伺服器硬體資源
若屢次調整後仍常見內存不足,建議評估升級主機記憶體或轉用更高規格雲端主機。共享主機用戶可考慮升級至VPS或雲端伺服器,如AWS EC2、Google Cloud Compute Engine等。
圖片建議:主機資源升級前後之效能監控比較圖。
最佳實踐摘要
- 優先釐清造成記憶體消耗的主因,避免一味調高限制
- 開發階段多用
memory_get_usage()、memory_get_peak_usage()監控 - 善用伺服器級監控工具,建立穩健的資源管理流程
- 定期檢查、優化老舊或效能不佳的外掛/程式碼
常見錯誤排解與進階建議
memory_limit已調整但問題依舊
- 確定PHP重啟生效(重啟Apache、Nginx、PHP-FPM)
- 檢查是否多版本PHP並行,調整到正確的php.ini
- 檢查是否有其他設定(如.htaccess、user.ini)覆蓋
- 檢查主機商是否有額外上限限制(尤其是共享主機)
安全性與資源濫用預防
- 避免將memory_limit設為無限(-1),以防惡意腳本耗盡伺服器資源
- 善用程式邏輯限制單次批次處理數量
- 妥善設定檔案上傳大小、執行時間等相關參數(如max_execution_time)
總結
遇到PHP內存不足錯誤時,應從診斷、調整memory_limit、優化程式邏輯、強化伺服器資源各方面著手。正確地設定php.ini或wp-config.php的memory_limit,不僅能排除錯誤,更能大幅提升網站效能與穩定性。建議持續監控資源使用情形,並定期檢查優化,才能打造高可用、高效能的PHP網站環境。
常見問題FAQ
如何確認php.ini修改的memory_limit已生效?
可在網站根目錄建立一個 phpinfo() 測試檔案,瀏覽後檢查memory_limit一欄的數值,若與設定相符即表示生效。

WordPress已調整WP_MEMORY_LIMIT但仍報錯,怎麼辦?
這可能是主機商限制memory_limit上限,或有其他php.ini/.htaccess/.user.ini覆蓋設定,建議聯繫主機商或檢查其他設定檔。
memory_limit設定越大越好嗎?
並非如此。設定過大可能讓單一請求占用過多資源,反而拖慢整體效能。建議依實際需求與伺服器規格設定合適上限。
共享主機無法修改php.ini怎麼辦?
可嘗試用 .user.ini 或 .htaccess 局部調整,若仍無效需詢問主機商協助,或考慮升級至可自訂環境的VPS/雲端主機。
有哪些工具可以協助持續監控PHP記憶體使用?
推薦使用New Relic、Datadog等APM工具,或伺服器內建監控面板(如CPanel, Plesk),可協助追蹤與警示記憶體異常。





