コードの一部だけではありません。
ただし、要求に応じて、元のコードを変更せずに、別の解決策があります。
set_time_limit
set_time_limit()
スクリプトの実行時間が長すぎると、スクリプト全体が中止されます。シャットダウン機能を設定することもできます。
pcntl_alarm
pcntl_alarm()
は、指定された時間が経過するとシグナルを送信します。これにより、クラスがその時点で実行しているブロッキングシステムコールが中止される場合があります。これにより、そのようなメソッドが提供されている場合は、クラスに操作を中止するように依頼できます。ただし、これはWebサーバー環境には適さない場合があります。
デフォルトのタイムアウト
クラスがストリーム関数を使用している場合、デフォルトのタイムアウトを設定できる場合があります。
ini_set('default_socket_timeout', 5);
stream_context_set_default(array(
'http' => array(
'timeout' => 5,
),
));
別のプロセスで実行する
でフォークすることもできますがpcntl_fork()
、これはサーバー環境には適していません。
また、PHPスクリプトを別のプロセスで使用proc_open
またはpopen
実行して、実行時間が長すぎる場合はそれを強制終了することもできます。(プロセスが生成された後、プロセスのstdoutストリームでアイドル待機を実行しstream_select
ます。)
または、これらのタスクを処理するためのサーバーをセットアップします。