読者です 読者をやめる 読者になる 読者になる

tweeeetyのぶろぐ的めも

アウトプットが少なかったダメな自分をアウトプット<br>\(^o^)/

memory sizeエラー(Allowed memory size of)について

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