メモリエラー:Allowed memory size of ~
とあるシステムの開発時の話なんですが、作成したバッチ処理(そこそこ重め)を実行させると、このようなエラーが!!
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 16 bytes) in ・・・
単なるメモリー不足のエラーなんですがね!!
PHPを使っている開発案件では、よく直面する有名なエラーです。
この場合には、
まずは、php.iniの設定を確認して、割り当てられているメモリの上限を確認します。
で、確認すると、
memory_limit = 128M
となっていました。
※memory_limitの値は、phpinfo()で確認するか、php.iniを開いて直接確認して下さい。
128Mであればデフォルトの設定のままなんですが、これでは足りなかったようですね。。。
因みに、memory_limitに設定しているメモリ量が、PHPのスクリプトを1回実行する度に割り当てられるメモリ上限値になります。
※1リクエスト辺りの上限です。
メモリの割り当てを変更
メモリ不足であれば仕方ないですね。
memory_limitの上限値を上げて対応する必要があります。
ですが、同一サーバ上で複数のサイトを運営しているので、大元のphp.iniの設定変更は他システムへの影響が心配です。
そこで、今回はini_set()関数で対応することに。
該当のスクリプトファイルの頭の方に
ini_set(“memory_limit”, “200M”);
を追記してやることで、メモリ制限を200Mにしてやることが可能です。
※メモリの上限は、必要に応じて変更して下さい。
因みに、
.htaccessに
php_value memory_limit 200M
と記述して対応する方法もあります。
メモリの上限を解除
あまりおすすめはしませんが、一応、メモリの上限を無くすこともできます。
ini_set(“memory_limit”, “-1”);
とすれば、OKです。
もし、ph.iniを直接変更する場合には、
memory_limit = -1;
と変更して下さい。
また、.htaccessで設定する場合には、
php_value memory_limit -1
と設定して下さい。