【PHP】Allowed memory size of XXX bytes exhausted エラーの解決方法

PHP-Memory-Error

こんにちはフロントエンドエンジニアのまさにょんです!

今回は、Allowed memory size of XXX bytes exhausted エラーの解決方法について解説していきます。

Allowed memory size of XXX bytes exhausted (tried to allocate XXX bytes) エラー

上記のエラーは、日本語に翻訳すると「XXX バイトの許容メモリ サイズを使い果たしました (XXX バイトを割り当てようとしました)」という意味です。

結論: メモリーが不足している

PHPで Allowed memory size of XXX bytes exhausted (tried to allocate XXX bytes) エラーがでた場合は、メモリー不足が原因です。

つまり、php.ini (PHPの設定ファイル)で設定しているメモリが全部使われてしまったというエラーです。

これはプログラムだけの問題ではない可能性が高いので、対策をしなければいけません。

エラーを解決するための方法

php.ini のメモリー設定・メモリー上限の設定を拡張する

まずはPHPの設定ファイルである「 php.ini 」のメモリー割り当ての上限値を確認して、最適な値に拡張しましょう。

「 memory_limit 」という設定値が、メモリー割り当ての上限値を設定できるオプションです。

memory_limit = 128M

となっている箇所のメモリーを拡張しましょう。

次のSampleではメモリー割り当ての上限値をmemory_limit = 1G にまで拡張しています。

「 php.ini 」の設定を変更した後は、忘れずに Web-Server を再起動して設定を反映させてください。

[PHP]

memory_limit = 1G

たいていは、これでエラーを解決できるはずです。

もし、これでエラーが解決できないのなら、無限ループが起きているとかSrcCodeに問題がある可能性が高いです。

そもそもメモリーが枯渇しないような、SrcCodeの最適化をする必要があります。

ini_set関数を使って、一時的にメモリーの上限を上げる

ini_set関数で一時的にメモリ上限を上げることができます。

ini_set関数を使用すると「 php.ini 」の設定値を一時的に変更してくれます。

次のSampleでは「 php.ini 」の memory_limit を指定して、3G を割り当てています。

特定のファイルだけ極端に処理が重い時は、これを使用するのもありだと思います。

<?php
  ini_set("memory_limit", "3G");
?>

unsetを使って、明示的にメモリーを解放する

unset関数は、指定した変数のメモリー割当を解除する・破棄する関数です。

確保されたメモリーが削除処理されなかった場合、

処理が終わっているのに、プログラムがメモリーを使用している「メモリーリーク」という状況になってしまいます。

PHPでは一連の処理が終わると、自動的にメモリーを開放してくれますが、

非常に長い処理や重いループ処理などでは、変数を明示的に初期化してあげたほうがいい場合もあるようです。

unset($data);

Twitterやってます!Follow Me!

神聖グンマー帝国の逆襲🔥

神聖グンマー帝国の科学は、世界一ぃぃぃぃぃぃ!!!!!

PHP / Laravel書籍

参考・引用

  1. 【PHP】Allowed memory size of *** bytes exhaustedエラーの対処法まとめ

最近の投稿