[php]composer requireでメモリサイズエラー(Allowed memory size of …)

PHP

composer requireでメモリサイズエラー

dockerでcomposer requireを行った時に、下記のエラーが発生しました。
許容メモリサイズ1610612736バイトを使い果たしたとのこと…

こちらのエラーについて、一時的な対応方法と恒久的な対応について記載しています。

Fatal error: Allowed memory size of 1610612736 bytes exhausted (tried to allocate 4096 bytes) in phar:///usr/bin/composer/src/Composer/DependencyResolver/Solver.php on line 223

一時的にエラーが起きないようにする

まず、whichコマンドで、composerコマンドの場所を確認します。

$ which composer

下記のように、/usr/bin/composerにあることがわかりました。
環境によっては置いてある位置が違うかと思います。

/usr/bin/composer

phpコマンドを使用して、-dオプションをつける事によりメモリ制限を設けずに実行します。
下記のように、コマンドを実行すると、メモリサイズのエラーが出ずに実行できます。

$ php -d memory_limit=-1 /usr/bin/composer require [パッケージ名]

PHPのマニュアルをみると、-dオプションについては下記のように書いています。

このオプションにより php.ini で指定できる設定ディレクティブに カスタム値を設定することができます。構文は以下のようになります。

公式のPHPオプションマニュアルはこちらです。

php.iniのメモリ制限(memory_limit)を一時的に無制限にして対応しているという事ですね。

エラーが起きないようにメモリ制限を設定する

一時対応ではなく、恒久的に対応する場合は、memory_limitの制限を増やせばOKです。

php.iniの場所を探します。

$ php -i | grep ini
Configuration File (php.ini) Path => /usr/local/etc/php
Loaded Configuration File => /usr/local/etc/php/php.ini

/usr/local/etc/php/php.iniにあることがわかりました。

vimエディタなどで開いてmemory_limit項目を下記のように設定します。

memory_limit=3000M

必要な分だけ設定するといいかと思います。今回は3000MBにしてみました。
memory_limit項目の初期値は128MBになっています。

あとは通常通りcomposer requireを実行すればOKです。
memory_limitは画像のアップロードなどにも関係してくる設定ですので、気をつけて設定したいところですね。

コメント

タイトルとURLをコピーしました