PHPプログラミングでは、スクリプトの実行時間が制限されており、デフォルトでは、スクリプト実行時間は通常30秒です。スクリプトの実行時間が制限を超えた場合、PHPは自動的にスクリプトを終了し、タイムアウトエラーをスローします。これを回避するために、PHPはset_time_limit()関数を提供し、スクリプトの最大実行時間を手動で設定できるようにして、長期にわたるタスクをスムーズに完了できるようにします。
set_time_limit()は、現在のスクリプトで実行される最大秒数を設定するPHPの組み込み関数です。この関数を呼び出すと、PHPはコールからタイマーと再タイムをリセットします。
関数定義は次のとおりです。
set_time_limit(int $seconds): bool
$秒パラメーターは、スクリプトの実行が許可されている秒数を示します。 0に設定されている場合、それは制限がないことを意味し、長い実行時間のためにスクリプトは終了しません。
リターン値はブール型であり、成功したときに真で、失敗したときにfalseです。
リセットタイマー:各コールは、スクリプトの最大実行時間タイミングをリセットします。
非セーフモードでのみ有効:PHPがセーフモードで実行されている場合(safe_mode)、 set_time_limit()は無効です。
CLIモード:コマンドラインモードでは、通常、時間制限はありません。Set_time_limit ()はそれに影響しません。
php.iniでmax_execution_timeで使用:デフォルトの最大実行時間は30秒で、 set_time_limit()でオーバーライドできます。
以下は、 set_time_limit()の一般的な使用法を示すためのいくつかの例です。
60秒かかるタスクを実行する必要があると仮定すると、デフォルトの30秒はタイムアウトします。
<?php
// 最大実行時間を設定します 90 2番
set_time_limit(90);
echo "時間のかかるタスクの実行を開始します...\n";
for ($i = 0; $i < 60; $i++) {
sleep(1); // シミュレーションの時間式操作
echo "実行された {$i} 2番\n";
}
echo "タスクは完了しました。\n";
?>
この例では、 set_time_limit(90)を呼び出した後、スクリプトは90秒の最大実行を許可し、デフォルトの30秒で終了しません。
一部のタスクには実行時間が不確実であり、タイムアウトによって制限される必要はありません。
<?php
// 実行時間制限をキャンセルします
set_time_limit(0);
while (true) {
// 継続的に実行する必要があるコードは次のとおりです
echo "スクリプトは継続的に実行されています...\n";
sleep(5);
}
?>
スクリプトは、過度の実行時間のために終了することを余儀なくされません。
リモートインターフェイスにアクセスすると、ネットワークの遅延によりリクエストタイムアウトが発生する可能性があります。スクリプトの実行時間を延長して、リクエストを完了できるようにすることができます。
<?php
// スクリプトの最大実行時間を延長します
set_time_limit(120);
$url = "https://gitbox.net/api/data";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
if (curl_errno($ch)) {
echo 'Curl error: ' . curl_error($ch);
} else {
echo "リクエスト結果:" . $response;
}
curl_close($ch);
?>
ここでは、 https://gitbox.net/api/dataは例の要求アドレスであり、 set_time_limit(120)は、スクリプトが応答を待つのに十分な時間を確保することを保証します。
set_time_limit()は、PHPスクリプトの最大実行時間を制御する重要な関数です。
この機能を合理的に使用して、特に時間のかかる操作を実行する場合、タスクの中断を引き起こすスクリプトタイムアウトを避けます。
スクリプトの実行時間は、サーバーリソースを無駄にしないように無制限にできないことに注意してください。
ネットワークリクエストやファイル処理などの時間のかかるタスクを組み合わせる場合、実行時間を適切に設定するのがベストプラクティスです。
set_time_limit()の使用法を習得することにより、PHPスクリプトをより安定して効率的にすることができ、タイムアウトエラーによって引き起こされるトラブルを軽減できます。