首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP 「Fatal error: Allowed memory size exhausted」記憶體不足三種解法

     編輯:PHP 綜合知識

錯誤範例

Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 32 bytes) in ...

134217728 bytes = 128 MB,預設 memory_limit=128M(PHP 5.2+ 預設值,早期版本為 8M)。

三種調整方式(依權限由高到低)

1. 修改 php.ini(需管理員權限,永久生效)

; 找到 memory_limit 行,調大單位用 M
memory_limit = 256M

修改後重啟 PHP-FPM / Apache。

2. 程式碼內動態調整(需 ini_set 未被禁用)

<?php
ini_set('memory_limit', '256M'); // 放在腳本最開頭
// 後續耗記憶體操作...

注意:若 disable_functions 含 ini_set 則無效。

3. .htaccess 覆寫(Apache + mod_php,虛擬主機常用)

<FilesMatch "\.(php|html?)$">
    php_value memory_limit 256M
</FilesMatch>

常見耗記憶體場景與優化

場景優化方向
大檔案 file_get_contents/fread 一次讀全檔改用串流 fopen+fread 分塊處理
資料庫一次 fetchAll 幾萬筆游標分批 fetch、或 LIMIT 分頁
圖片處理(GD/Imagick)大圖先縮圖再處理、或用 Imagick 串流
遞迴/大陣列複製引用傳遞、生成器 yield、釋放未用變數 unset()
Composer update 記憶體不足COMPOSER_MEMORY_LIMIT=-1 composer update

排查步驟

  1. 確認錯誤訊息中的 Allowed memory size of X bytes,換算為 MB(X/1024/1024)。
  2. 檢查 php -i | grep memory_limit 實際生效值。
  3. 逐步調大(128M → 256M → 512M)測試,避免無限制導致單一腳本耗盡記憶體影響其他進程。
  4. 若調至 512M 仍失敗,必須優化程式碼,單純加記憶體治標不治本。

特殊提醒

Windows + Apache 2.2 + PHP 5.1.x 存在已知 Bug 導致 memory_limit 設定不生效,唯一解法是升級 PHP 版本或更換執行模式(改用 PHP-FPM + Nginx)。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved