前言

近期發現在使用 Composer 時,都會跑到

PHP Fatal error: Allowed memory size of XXXXXX bytes exhausted <...>

於是上網找了一些資料,這邊做個整理

記憶體用去哪了

在下指令時,補上 -vvv 可以看到執行過程,例如:

composer install -vvv

(不過在 mac 好像不會 show memory 用了多少,在 centos 裏面記得是有 show)

解法 1 - 改 php.ini

追加以下設定到 php.ini 中 ( 出處 ):

; Use -1 for unlimited or define an explicit value like 2G
memory_limit = -1

不推薦此做法,這樣本地整個環境的 php 都會被影響。

解法 2 - 透過 php 指令加大記憶體

透過 php 宣告,臨時加大記憶體配置,例如:

php -d memory_limit=-1 composer.phar <...>

個人不使用此做法,與平常直接使用 composer 習慣有差,還要多打 php -d ...

解法 3 - 透過 composer 指令加大記憶體 (推)

透過 composer 宣告,臨時加大記憶體配置,例如:

COMPOSER_MEMORY_LIMIT=-1 composer.phar <...>

再次別名 (以 Mac 為例)

可透過 aliases 再次別名,讓記憶體加大這件事不用每次打,例如:

echo "alias composer=\"COMPOSER_MEMORY_LIMIT=4G composer\"" >> ~/.aliases

重開終端機,即可正常使用:

composer install <...> # 這樣下記憶體已經加大過了

最後

  1. 前述解法中提到的 composer.phar 若有設置過軟連結,則改為 composer
  2. 臨時加大的記憶體,不要設置成 -1 (開到最大),我通常設定成 4G (夠用就好),例如 COMPOSER_MEMORY_LIMIT=4G composer <...>,避免記憶體爆掉

有任何問題或想法,歡迎留言交流,如果寫的內容有錯誤的地方,希望能不吝指點,感謝。

參考連結



文章作者: littlebookboy
永久鏈結: https://blog.genesu.me/2021/06/how-to-solve-memory-issue-when-using-composer/
許可協議: 署名-非商業性使用-相同方式共享 4.0 國際(CC BY-NC-SA 4.0)