phpでテストのために要素数が多い配列を無駄に生成したかった。
そこでループを10000000000回まわして生成しようと思ったところ、memori sizeエラーが出た。
ちょっとループしすぎた?w
たまに出るエラーだけど忘れそうなのでその現象と対処法?をメモ
まずは現象
・ソース
<?php $loop_num = pow(10,10); echo($loop_num); foreach ( range(1,$loop_num) as $num ){} echo("\nend \n"); ?>
・実行結果
# php looptest.php 10000000000 PHP Fatal error: Allowed memory size of 679477248 bytes exhausted (tried to allocate 32 bytes) in /home/hoge/phptest/looptest.php on line 4 PHP Stack trace: PHP 1. {main}() /home/hoge/phptest/looptest.php:0 PHP 2. range() /home/hoge/phptest/looptest.php:4 Fatal error: Allowed memory size of 679477248 bytes exhausted (tried to allocate 32 bytes) in /home/hoge/phptest/looptest.php on line 4 Call Stack: 0.0001 622856 1. {main}() /home/hoge/phptest/looptest.php:0 0.0002 623128 2. range() /home/hoge/phptest/looptest.php:4
対処法
679477248bytes(600Mちょい)ではメモリが足りませんよ的なことらしい。
対処法としてはphp.iniのmemory_limitを編集する。
その前にphp.iniの値を確認
# php -i | grep memory memory_limit => 648M => 648M
なるほど。
適当に倍とか多めに編集してapache再起動で対応完了。
ちなみに、.htaccessでも対応可能らしいです
→http://webtech-walker.com/archive/2007/03/05152445.html