PHP內存不足錯誤(PHP memory limit error)是許多網站管理員與開發者經常面臨的技術挑戰。本文將系統性解析造成此類錯誤的根本原因,並提供從初學者到資深工程師都適用的解決方法,包括如何正確調整php.ini與wp-config.php中的memory_limit值,深入探討伺服器配置優化策略,以及現場實作經驗分享。閱讀本指南後,您將能有效排除PHP內存不足問題、提升網站效能與穩定性、並建立更具彈性的伺服器環境。
文章目錄
Toggle認識PHP內存不足錯誤與常見現象
什麼是PHP內存不足錯誤
當PHP在執行過程中所需的記憶體超過了預設或伺服器允許的上限時,就會產生內存不足錯誤(Fatal error: Allowed memory size of X bytes exhausted)。這種情況常見於執行大型資料運算、圖片處理、安裝或升級外掛、匯入大量資料等操作時出現。
常見錯誤訊息與判斷方式
- Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 123456 bytes)
- PHP Fatal error: Out of memory
- 500 Internal Server Error(有時記憶體不足會導致伺服器回傳此錯誤)
建議插入圖片:「PHP內存不足錯誤訊息截圖」
說明:展示常見的錯誤訊息畫面,幫助讀者快速辨認。
PHP memory_limit設定原理與影響層級
memory_limit是什麼?
memory_limit是PHP設定檔中的一項關鍵參數,用來限制單一PHP程序可使用的最大記憶體容量。預設值通常為128M或256M,依不同主機環境而異。若PHP執行時超過此上限,會直接終止程序並回傳錯誤。
memory_limit設定的層級與優先順序
- php.ini(全域伺服器層級):影響所有PHP應用與網站。
- .htaccess(目錄層級,需Apache支援):可針對特定網站或目錄調整。
- wp-config.php(WordPress專用):覆蓋php.ini設定,僅限於WP程式運作時。
- ini_set()(程式碼層級):僅作用於當前PHP腳本。
建議插入圖片:「PHP memory_limit設定優先層級示意圖」
說明:以圖解方式輔助說明不同設定層級的關聯。
如何判斷是否需要提升memory_limit值
常見導致內存不足的情境
- WordPress或Drupal等CMS處理大型匯入、外掛升級時失敗
- 圖片壓縮、縮圖產生、PDF轉檔等需大量記憶體的運算
- 執行複雜SQL查詢或大量資料處理(如報表產生)
- 網站訪問量激增,PHP進程同時執行數量增多
如何檢查目前memory_limit設定
-
建立phpinfo()檔案:
<?php phpinfo(); ?>
瀏覽該檔案,搜尋「memory_limit」即顯示當前值。 - WordPress後台健康檢查工具(網站狀態):檢查伺服器資源配額。
-
命令列查詢(適用於VPS/雲主機):
php -i | grep memory_limit

調整php.ini與wp-config.php的memory_limit設定步驟
修改php.ini設定memory_limit
- 找到php.ini檔案(常見路徑:/etc/php/7.x/apache2/php.ini或/opt/lampp/etc/php.ini)
- 使用vim、nano等編輯器開啟檔案
- 搜尋「memory_limit」並修改為適當值,如:
memory_limit = 512M - 儲存並重新啟動Web伺服器(如Apache:
sudo systemctl restart apache2) - 再次執行phpinfo()檢查是否生效
操作範例
sudo vim /etc/php/7.4/apache2/php.ini
memory_limit = 512M
sudo systemctl restart apache2
修改wp-config.php設定memory_limit
- 使用FTP或檔案管理器下載/開啟wp-config.php
- 在
/* That's all, stop editing! Happy blogging. */前新增下列程式碼:
define('WP_MEMORY_LIMIT', '256M'); - 儲存並上傳覆蓋原檔案
- 檢查WordPress後台「網站狀態」是否反映新設定
注意事項
- 部分虛擬主機限制memory_limit最大值,如遇無法調高,請洽詢主機商。
- 若同時設有php.ini與wp-config.php,WordPress以程式內設定為主。
建議插入圖片:「php.ini與wp-config.php修改畫面截圖」
說明:標示修改位置,有助新手理解。

其他調整memory_limit的方法與限制
使用.htaccess調整(僅Apache適用)
php_value memory_limit 512M
此方法需主機允許override PHP參數,部分共享主機無法生效。
程式碼動態設定
ini_set('memory_limit', '512M');
僅對當前PHP腳本有效,且部分主機有安全限制。
主機商後台介面調整
部分雲端主機(如cPanel、Plesk、DirectAdmin)提供圖形化介面,直接修改PHP參數,請依據主機說明操作。
選擇適當memory_limit值的建議原則
不同應用建議值比較表
| 應用情境 | 建議memory_limit值 | 說明 |
|---|---|---|
| 小型部落格/靜態網站 | 64M–128M | 僅基本文章與圖片,資源消耗低 |
| 中型WordPress網站 | 256M | 含多外掛、圖片處理、基本電商 |
| 大型電商、社群平台 | 512M–1024M | 大量資料運算/多用戶同時操作 |
| 批次任務/報表/轉換工具 | 512M–2048M | 需根據程式需求與伺服器資源彈性調整 |
選擇原則
- 以實際需求為基礎,避免無限制提升,防止伺服器資源耗盡
- 觀察PHP錯誤日誌,追蹤記憶體耗用高峰
- 多站或多用戶情境下,總記憶體應乘以同時進程數量
伺服器配置優化策略與經驗分享
硬體資源與PHP memory_limit的關係
- 伺服器總實體RAM需大於所有PHP進程memory_limit總和
- 過高的memory_limit可能導致伺服器swap、系統不穩
經驗案例分享
某中型電商網站於活動期間,因memory_limit僅設128M,導致大量圖片壓縮失敗與訂單處理中斷。經調整至512M後,配合優化程式記憶體管理,成功處理高峰流量,且未出現伺服器資源溢出。
伺服器整體優化建議
- 適度調整memory_limit,配合優化程式碼與資料庫查詢效能
- 善用OPcache、Redis等快取技術減少PHP運算壓力
- 監控伺服器記憶體使用率,及早預警資源瓶頸
- 定期檢查PHP錯誤日誌,追蹤異常或記憶體洩漏問題
- 分散大型運算工作至批次處理或CLI腳本,減少Web請求壓力
插圖建議
建議插入圖片:「伺服器記憶體使用監控儀表板截圖」
說明:顯示不同memory_limit值下的伺服器資源分配情形。
常見陷阱與問題排查技巧
memory_limit調整後未生效的原因
- 未重啟Web伺服器或PHP-FPM服務
- 主機商限制最大值,需客服協助
- 有多個php.ini(CLI與Web不同)導致設定錯誤
- .user.ini或.htaccess被覆蓋
如何定位記憶體耗用過高的程式碼
- 啟用Xdebug或Blackfire等PHP效能分析工具
- 於關鍵程式段落加上
memory_get_usage()與memory_get_peak_usage()紀錄 - 觀察PHP錯誤日誌,追蹤高耗用頁面與請求參數
錯誤日誌分析範例
[19-Jun-2024 16:22:01 UTC] PHP Fatal error: Allowed memory size of 268435456 bytes exhausted (tried to allocate 262144 bytes) in /var/www/html/wp-content/plugins/xxx.php on line 123
由上述日誌可判斷是哪一個外掛或程式檔案產生問題,進一步追蹤與優化。
總結與最佳實踐建議
- 正確設定memory_limit有助於防止PHP程序異常終止,保障網站穩定性
- 調整memory_limit需配合伺服器硬體資源與實際應用需求
- 建議結合程式優化與系統監控,建立完整的效能管理機制
- 遇到無法排除的內存錯誤時,應詳細檢查所有設定層級與日誌
更多PHP與伺服器管理實用技巧,歡迎參考本站其他專業文章或聯繫本網站技術團隊取得進一步協助。
常見問答(FAQ)
- Q1:調高memory_limit會對伺服器造成什麼風險?
- A:若memory_limit設過高,且有多個PHP進程同時執行,可能導致伺服器記憶體耗盡甚至死機。建議依據伺服器總RAM與實際需求調整,監控資源使用狀況。
- Q2:修改wp-config.php的memory_limit,為什麼沒有效果?
- A:可能是主機商有設置更高層級限制,或php.ini設定值比wp-config.php低。建議先檢查phpinfo()顯示的實際memory_limit,必要時聯繫主機商協助。
- Q3:如何知道自己網站需要多少memory_limit?
- A:可根據網站規模、外掛數量、平時運算需求與PHP錯誤日誌來評估。建議從256M起步,遇到內存不足再逐步調高,同時觀察伺服器資源是否足夠。
- Q4:memory_limit調整後,還是遇到內存不足怎麼辦?
- A:建議檢查程式碼是否有記憶體洩漏、無效迴圈或外掛衝突。可透過PHP效能分析工具進行深入排查,或尋求專業技術協助。
- Q5:共享主機可以自行調高memory_limit嗎?
- A:多數共享主機僅允許在一定範圍內調整,若遇到無法設置更高值,需諮詢主機商或考慮升級至VPS/雲主機等更高等級方案。
作者建議: 本文由具有多年PHP開發與伺服器維運經驗的專業技術團隊撰寫,資訊來源皆經實測驗證,歡迎讀者於下方留言或聯繫我們交流更多優化經驗。





