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
#

先ほどのエラーも出なかった。