PHPをCLI(コマンドライン)から実行するときだけメモリ制限を解除してみる。
CLIアプリでDBの変換スクリプトを書いていたところ、PHP Fatal error: Allowed memory size of xxxx bytes exhausted が出る。 許可されているメモリを使い果たしてしまったらしい。
# php dbconv01.php
PHP Fatal error: Allowed memory size of 268435456 bytes exhausted (tried to allocate 72 bytes) in pdohelper.php on line 79
PHP Stack trace:
PHP 1. {main}() dbconv01.php:0
PHP 2. main($argv = array (0 => 'dbconv01.php')) dbconv01.php:75
PHP 3. DB_Select($pdo = class PDO { }, $col = 'id', $tbl = 'crawllog', $where = NULL, $conds = NULL, $order = 'id asc', $startidx = *uninitialized*, $rownum = *uninitialized*) dbconv01.php:54
PHP 4. PDOStatement->fetchAll(2) lib/pdohelper.php:79
/etc/php.ini に 256Mでの制限を設定しているのでそうなるだろう。
http://www.php.net/manual/ja/ini.core.php#ini.memory-limit /etc/php.ini
; Maximum amount of memory a script may consume (128MB)
; http://php.net/memory-limit
;memory_limit = 128M
memory_limit = 256M
ここを増やすと、CLIのPHPも、Apacheのモジュールとして動作しているPHPも全部に影響してしまう。 そのときは、PHPのコマンドラインに「 -d memory_limit=-1 」を追加すればこの実行のみ変更することができた。
# php -d memory_limit=-1 dbconv01.php
#
先ほどのエラーも出なかった。