Caution
お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。
exit() / die() / sleep()対応: PHP 4(2000)
スクリプトの実行を終了したり、一定時間の待機を行う関数です。リダイレクト後の終了処理やバッチ処理の制御に使用します。
構文
// スクリプトの実行を終了します。メッセージを出力することもできます。 exit($status); // exit() と同じ動作です。エラー時の終了に使う慣習があります。 die($status); // 指定した秒数だけ処理を一時停止します。 sleep($seconds); // 指定したマイクロ秒だけ処理を一時停止します。 usleep($microseconds);
関数一覧
| 関数 | 概要 |
|---|---|
| exit($status) | スクリプトの実行を終了します。引数に文字列を渡すと出力してから終了し、整数を渡すと終了ステータスコードとして使用します。 |
| die($status) | 『exit()』と完全に同じ動作をする言語構造です。機能的な違いはなく、コードの意図を表現するために使い分けられます。 |
| sleep($seconds) | 指定した秒数だけスクリプトの実行を一時停止します。成功時は『0』を返します。 |
| usleep($microseconds) | 指定したマイクロ秒だけスクリプトの実行を一時停止します。1秒は1,000,000マイクロ秒です。 |
サンプルコード
<?php
// リダイレクト後に exit() で終了します。header() 後の必須パターンです。
if (!isset($_SESSION['user_id'])) {
header("Location: /login.php");
exit; // これがないとリダイレクト先に遷移せず処理が続行されます。
}
// メッセージを出力してから終了します。
$config = @include('/path/to/config.php');
if ($config === false) {
exit("設定ファイルの読み込みに失敗しました。");
}
// die() はエラー処理での終了を表現する場合によく使われます。
$conn = @mysqli_connect('localhost', 'user', 'pass', 'db');
if (!$conn) {
die("データベースに接続できませんでした。");
}
// 終了ステータスコードを指定する例です。
if ($argc < 2) {
echo "使い方: php script.php [filename]\n";
exit(1); // 異常終了を示すステータスコード『1』を返します。
}
// sleep() で一定時間待機します。
echo "処理を開始します。\n";
echo date('H:i:s') . "\n";
sleep(3); // 3秒間一時停止します。
echo date('H:i:s') . "\n"; // 3秒後の時刻が出力されます。
echo "処理が完了しました。\n";
// usleep() でミリ秒単位の待機を行います。
for ($i = 0; $i < 3; $i++) {
echo "リトライ " . ($i + 1) . " 回目\n";
usleep(500000); // 0.5秒待機します。
}
// APIレート制限への対応例です。
function call_api_with_retry(string $url, int $max_retry = 3): string|false {
for ($i = 0; $i < $max_retry; $i++) {
$response = @file_get_contents($url);
if ($response !== false) {
return $response;
}
sleep(pow(2, $i)); // 1秒、2秒、4秒と指数的に待機時間を増やします。
}
return false;
}
概要
『exit()』と『die()』はスクリプトの実行を即座に終了する言語構造です。両者は完全に同じ機能を持ちますが、『exit()』は正常終了、『die()』はエラー時の終了を表す慣習的な使い分けがあります。『header("Location: ...")』によるリダイレクトの直後には必ず『exit()』を記述してください。『exit()』がないとPHPはスクリプトの残りの処理を実行し続けるため、セキュリティ上の問題や意図しない動作の原因になります。
『sleep()』はバッチ処理でのレート制限対応やリトライ待機に使用します。Webリクエストの処理中に長時間の『sleep()』を使うとタイムアウトの原因になるため、Webアプリケーションでの使用は避けてください。
エラー報告の制御については『error_reporting()』、基本的な出力については『echo / print』を参照してください。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。