@Satoh_D no blog

大分にUターンしたので記念に。調べたこととか作ったこととか食べたこととか

【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しか触ったこと無いのでわかりませんが、他のフレームワークでも似たようなことは出来るかと思います。

メモリの使用量を増やすことでエラーメッセージも出ずに無事処理が走るようになりました。 これで同様のエラーが出た場合には落ちついて対応できそうです。