##はじめに
この記事はプログラミング初学者による備忘録用の記事であり、また、少しでも他の初学者のお役に立てればと思い書いています。
今回は、composer require "doctrine/dbal:2.*"
を試みた際に、PHP Fatal error: Allowed memory size of 1610612736 bytes exhausted以下略というメモリに関するエラーが発生しましたので解決策を記録しておきます。
間違いなどがございましたら、ご指摘のほどよろしくお願い致します。
##エラー文
PHP 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
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
Check https://getcomposer.org/doc/articles/troubleshooting.md#memory-limit-errors for more info on how to handle out of memory errors.
##解決策
エラー文を読んでみると、どうやら https://getcomposer.org/doc/articles/troubleshooting.md#memory-limit-errors のサイトを読むと解決できるよと教えてくれています。親切ですね。
リンク先のサイトを読んでみると、
Composerは、一部のコマンドでPHP Fatal error: PHP Fatal error: Allowed memory size of XXXXXX bytes exhausted <...>
のようなメッセージを表示して失敗することがあるらしく、このような場合はPHPのmemory_limit を増やす必要があると書かれています。
また、$ php -r "echo ini_get('memory_limit').PHP_EOL;"
を使うことで、現在のmemory_limitの値を取得することが可能らしく、実際に使用してみると下記のように表示されました。
$ php -r "echo ini_get('memory_limit').PHP_EOL;"
256M
エラー文で必要とされているメモリ値(1610612736 bytes)と上記に書かれているメモリ上限値を比較すると明らかに不足していたのでエラーが発生したと分かります。
PHPのmemory_limit を増やすには、php.iniを修正する必要があり、
修正方法として無制限とする-1 を使うか、2G のように明示的な値を定義します。
memory_limit = -1
or
memory_limit = 2G
補足
いくつかの PHPディレクティブでは、バイト値をintではなくG
のように省略形で設定できます。
参考:
https://www.php.net/manual/ja/faq.using.php#faq.using.shorthandbytes
##おわりに
今回のエラーでは、php.iniのmemory_limit
を修正しメモリ上限値を増やし、docker-compose up --build -dを実行して変更を反映することで、composer require "doctrine/dbal:2.*"
が実行できました。