【PHP】"Allowed memory size of ..."エラーで処理が落ちた時の対応法4つ
現在の案件で重いデータを扱っていたところ、下記のようなエラーが出てしまいました。
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 32 bytes) ...
調べてみると、利用可能な最大メモリ使用量を超えたときに出てくるエラーみたいです。 とりあえず以下の方法でメモリ使用量の設定を変えてあげれば回避できそうです。
1. php.iniで設定を変える
php.iniの中に以下の様な項目があるかと思います。
; Maximum amount of memory a script may consume (128MB) ; http://php.net/memory-limit memory_limit=128M
これがメモリの最大使用量を設定している部分です。 デフォルトでは128MBまで使えるようになっています。 256MBなり余裕があれば増やしてあげましょう
2. .htaccessに記述する
権限が無くてphp.iniが触れない場合は .htaccessに書くことでも同じことが出来ます。 .htaccessを開き(ない場合は作成し)、下記の文言を記述します。
php_value memory_limit 256M
3. コードの中に設定を記述する
権限がなくてphp.ini, .htaccessが触れない、または暫定的にこの部分のみ対応したいという場合は以下のコードを追加すると良いかと。 ini_set関数の2番めの引数の数値を変えてあげましょう。
ini_set('memory_limit', '256M');
4. フレームワークの設定ファイルに記述する
今回は権限の関係上php.iniが触れませんでしたが、 Zend_Frameworkを使っていましたので application.ini に以下のような記述を行いました。
phpSettings.memory_limit = "256M"
PHPのフレームワークはZend_Frameworkしか触ったこと無いのでわかりませんが、他のフレームワークでも似たようなことは出来るかと思います。
メモリの使用量を増やすことでエラーメッセージも出ずに無事処理が走るようになりました。 これで同様のエラーが出た場合には落ちついて対応できそうです。