在現代網頁開發與網站運維中,PHP內存不足錯誤(如 “Allowed memory size exhausted”)是許多站長和開發者經常遇到的棘手問題。這不僅會導致網站功能異常,還可能造成用戶體驗下降與SEO表現受損。本文將從實務經驗出發,教你如何識別內存不足的成因、有效調整 php.ini 和 wp-config.php 的 memory_limit,並針對不同伺服器環境給出優化建議。讀完後,你將能徹底解決PHP內存錯誤,並讓網站運作更穩定高效。
文章目錄
Toggle認識PHP內存不足錯誤的成因與影響
什麼是PHP內存不足錯誤
PHP在執行過程中,每個請求都有設定的記憶體使用上限(即 memory_limit)。當程式碼運算或載入資源超過這個限額時,系統便會拋出如 Fatal error: Allowed memory size of X bytes exhausted 的錯誤訊息。這類錯誤常見於大型WordPress網站、大型圖片處理、複雜報表或API資料抓取場景。
常見導致內存不足的情境
- 網站或應用程式流量突然暴增
- 使用高資源消耗的外掛或主題(如WooCommerce、視覺編輯器)
- 執行大量或複雜的資料庫查詢
- 批次處理大量圖片或檔案上傳
- 程式碼記憶體釋放不良(如記憶體洩漏、無限迴圈)
內存不足錯誤的實際風險
- 網站或後台無法正常載入,造成用戶流失
- 影響SEO,搜尋引擎無法正常爬蟲或索引
- 重要批次任務(如備份、資料同步)中斷
- 資料遺失風險增加
如何判斷與定位PHP內存不足問題
解讀常見錯誤訊息
典型的錯誤訊息如下:
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 262144 bytes) in /path/to/file.php on line 123
這裡 134217728 bytes 即為目前設定的 memory_limit(128MB),而程式嘗試分配額外記憶體時失敗。
確認目前PHP記憶體限制
- 可透過 phpinfo() 查看目前 memory_limit
- WordPress用戶可在後台「健康狀態」檢查伺服器資訊
- 命令列執行
php -i | grep memory_limit也可查得
調整PHP記憶體限制的正確方法
三種主流調整方式比較
| 設定方式 | 適用情境 | 優點 | 限制 | 優先順序 |
|---|---|---|---|---|
| php.ini | 有伺服器/主機管理權限 | 全站生效,最根本 | 共用主機通常無法自訂 | 最高 |
| .htaccess | Apache主機,無法修改php.ini | 可針對目錄調整 | 僅支援Apache且需開啟相關設定 | 中 |
| wp-config.php | WordPress專案,權限較低 | 快速、簡單 | 受php.ini的最高上限限制 | 低 |

如何修改php.ini的memory_limit
- 找到伺服器上的php.ini檔案,常見路徑有
/etc/php/7.x/apache2/php.ini或/usr/local/lib/php.ini。 - 打開檔案並找到
memory_limit,如:memory_limit = 128M
- 調整為所需數值(建議256M或512M,依應用需求決定)。
- 儲存後,重啟Web伺服器(如Apache執行
sudo systemctl restart apache2)。 - 重新檢查 phpinfo() 或網站狀態確認生效。
如何在wp-config.php調整WordPress記憶體限制
- 使用FTP或主機檔案管理器,下載網站根目錄下的
wp-config.php。 - 在
<?php標籤下方,加入:define('WP_MEMORY_LIMIT', '256M');若需後台管理更高記憶體,亦可加入:
define('WP_MAX_MEMORY_LIMIT', '512M'); - 儲存後上傳覆蓋原檔案,刷新網站測試是否解決問題。
注意:此法無法突破主機php.ini設定的上限,若遇效益有限,仍需聯絡主機商調整。
其他常用設定法
- 在單一PHP程式中加入:
ini_set('memory_limit', '256M');(僅當前程式有效) - 對於Apache主機的 .htaccess 可加入:
php_value memory_limit 256M - 部分VPS或雲主機可於Plesk、cPanel後台直接調整
伺服器配置與PHP效能優化實務
評估與選擇適合的memory_limit數值
| 網站類型 | 建議memory_limit | 應用範例 |
|---|---|---|
| 小型部落格/企業官網 | 128M~256M | WordPress、Joomla、Drupal基礎型站點 |
| 中型電子商務 | 256M~512M | WooCommerce、Magento、PrestaShop |
| 大型內容網站/社群 | 512M~1024M | 多媒體新聞站、論壇、線上課程平台 |
| 專案型API/批次處理 | 依需求(可達2G以上) | 批次匯入、資料分析、圖片轉檔 |
伺服器資源監控與瓶頸發現
- 定期透過 top、htop、free -m 或主機後台觀察記憶體使用狀況
- 安裝PHP監控插件(如New Relic、Datadog、Xdebug)
- WordPress用戶可用Query Monitor或WP Server Stats檢查資源消耗
最佳化PHP程式與網站的建議
- 精簡外掛與主題,移除不必要的模組
- 優化SQL查詢,避免N+1查詢問題
- 圖片與多媒體資源壓縮,減少單次載入記憶體需求
- 資源密集型任務分批處理(如分段匯入、圖片延遲處理)
- 善用快取技術(如OPcache、Redis、Memcached)
- 定期檢查並修正記憶體洩漏的程式碼問題
PHP內存不足錯誤的實務案例解析
案例一:電子商務網站圖片匯入失敗
某WooCommerce網站批次匯入大量商品時,出現 Allowed memory size exhausted 錯誤。經檢查,原本 memory_limit 僅有128M,將其於php.ini調升至512M後順利完成匯入。後續再將圖片處理任務拆分批次,配合短暫提升memory_limit,有效減少錯誤發生。
案例二:共享主機WordPress網站後台卡頓
站長反映WordPress後台經常卡住,檢查發現主機memory_limit僅64M,且無法修改php.ini。改用 wp-config.php 加入 define('WP_MEMORY_LIMIT', '128M');,改善大部份情境,但遇大型外掛時仍偶有不足,最後協調主機商提升主機全域memory_limit才徹底解決。
案例三:客製API資料處理錯誤
一個API專案在執行大批量資料分析時,發生內存不足。開發者於程式開頭動態設定 ini_set('memory_limit', '1G');,同時優化資料處理流程,減少一次性載入的資料量,成功避免系統異常。
進階伺服器配置與安全建議
調高memory_limit的風險與注意事項
- 勿將memory_limit調得過高,否則多個請求同時執行易耗盡主機記憶體,導致系統死當
- 建議根據主機實體記憶體總量與平均流量分配,預留作業系統及其他服務的緩衝
- 定期檢查應用程式是否有異常記憶體消耗,勿以提升memory_limit掩蓋程式錯誤
安全性與穩定性的綜合考量
- 避免將memory_limit設為無窮大(如-1),防止惡意或異常請求耗盡資源
- 善用PHP-FPM、Nginx等多進程管理,提高服務穩定性
- 對於多租戶環境,建議採用容器化或資源限制(如Docker、Kubernetes)
優化總結表
| 優化措施 | 預期效益 | 實施難度 |
|---|---|---|
| 調整php.ini memory_limit | 全站記憶體上限提升,減少錯誤 | 中高(需主機權限) |
| 優化程式與資源使用 | 根本降低記憶體消耗 | 高(需技術改寫) |
| 善用快取/資源分批 | 減少單次請求負載 | 中 |
| 監控與定期檢查 | 及早發現潛在問題 | 低 |
結語與後續延伸學習
解決 PHP內存不足錯誤 不僅是單純調高memory_limit,更需從程式優化、伺服器資源監控、網站規模與安全角度全面考量。建議定期檢視網站資源消耗,養成預防勝於治療的習慣。若還有進階主機配置、PHP效能疑難雜症,歡迎參考本網站更多專業教學或諮詢專家建議。
常見問題FAQ
- Q1. PHP memory_limit 設定多少才合適?
- 建議依據網站規模與用途調整,小型站點128M~256M即可,電子商務或多媒體網站則建議至少512M,特殊需求可依實際觀察再調整。
- Q2. 修改wp-config.php的WP_MEMORY_LIMIT後沒生效怎麼辦?
- 很可能主機的php.ini有更低的限制,WP_MEMORY_LIMIT無法突破全域上限,建議聯絡主機商或自行調整php.ini。
- Q3. memory_limit設太高有什麼風險?
- 若memory_limit設太高,當多個PHP請求同時執行時可能耗盡主機記憶體,導致整個伺服器當機,務必根據主機總資源分配。
- Q4. 內存不足錯誤能用快取完全解決嗎?
- 快取能分擔伺服器負載,但若程式本身資源消耗過大,還是可能發生內存錯誤,建議雙管齊下,兼顧快取與程式最佳化。
- Q5. 共享主機能否調整memory_limit?
- 多數共享主機限制用戶自訂php.ini,僅能透過wp-config.php或.htaccess嘗試調整,若仍無法生效需與主機商聯絡。

本文由具多年PHP/WordPress伺服器運維、性能優化經驗的專業團隊撰寫,資訊涵蓋主流網站架構、雲主機與共享主機實務,內容定期更新,確保符合最新技術趨勢。如需更深入的協助,歡迎聯繫我們或參考官方文件。





