こんにちはフロントエンドエンジニアのまさにょんです!
今回は、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!
神聖グンマー帝国の逆襲🔥
神聖グンマー帝国の科学は、世界一ぃぃぃぃぃぃ!!!!!