ソフトウェア開発者の日常

こだわりなく書きたいことを書いていきます。

PHP:実行時間の制限はどうなっているの?

以前お客さんのWindows Server環境で、PHPで作ったコマンドラインから起動するプログラムを実行していました。
半年に一度ほどの作業で、時間がかかる処理というのはわかっていました。
処理の状況から1時間半くらいで終了するかと予想して待機していました。

1時間経過したところで、突然コマンドラインから起動したプログラムが停止しました。
制限時間に達したので終了したようなメッセージが表示された記憶があります。
幸い再度プログラムを起動すれば、続きから処理できるようにプログラムを作ってあったので、再度起動して処理を完了しました。

コマンドラインから起動する場合は、実行時間は無制限の筈

以前、php.iniのmax_execution_timeの説明を読んだことがあります。
PHP: 実行時設定 - Manual

コマンドラインからの起動すると無制限になると記憶していました。
改めて見ましたが、「PHPコマンドライン から実行する場合のデフォルト設定は 0 です。」と書かれていました。

以前お客さんの環境でコマンドラインから実行して途中で終了してしまったのとつじつまが合いませんが、終了してしまったのは事実です。

f:id:AJYA:20161208062222j:plain
photo credit: www.digicrea.be RawTherapee - next step in creation RawBat via photopin (license)

プログラムから設定しておく

以前とは別のお客さんの環境で、PHPで作ったコマンドラインから起動するプログラムを実行する予定があります。
コマンドラインから実行する場合、無制限というのを信じてもいいのですが、懸念があります。
プログラムからの設定で回避できるのかわかりませんが、max_execution_time を大幅に大きな値にしてみようと考えています。

設定は、ini_set()を使えばできます。
PHP: ini_set - Manual

<?php
ini_set("max_execution_time",43200); // 12時間
?>

max_execution_timeの値はint型なので、int型の範囲に収まっているか念のため確認したところ、収まっていました。
PHP: 整数 - Manual


今となっては以前プログラムが止まってしまったお客さんの環境で試すことができないのが残念です。