PHPの exit はスクリプトの実行を即座に終了させます。エラー時の打ち切りや、header() でのリダイレクト後によく使われます。この記事では基本に加え、引数(文字列/整数)による挙動の違いや使いどころの注意点まで解説します。
exit; でスクリプトを終了します。文字列を渡すと出力され、終了コードは0。整数を渡すとそれが終了コードになり、画面には出力されません。die は exit の別名で機能は同じです。exitの基本的な使い方
exit は関数のように書けますが、実は言語構造なので引数がなければカッコも省略できます。実行されると、それ以降のコードは動きません。
<?php
if (!file_exists("important_file.txt")) {
exit("ファイルが見つかりません。"); // メッセージを出して終了
}
echo "この行は実行されません。";
引数による挙動の違い(文字列 vs 整数)
ここは混同しやすいポイントです。文字列を渡すと「出力」され、終了コードは0(正常)になります。一方、整数を渡すとそれが「終了コード」になり、画面には出力されません。
<?php
exit("エラーメッセージ"); // 画面に出力 → 終了コードは 0(正常)
exit(1); // 終了コード 1(エラー)→ 出力はされない
exit(0); // 終了コード 0(正常)
0 が正常、1 以上がエラー、という慣例)。exit("msg") はメッセージを出すだけで、終了コードは 0 のままです。注意:WebではexitはHTTPステータスを変えない
よくある誤解として、exit(1) や exit("error") でHTTPステータスがエラー(500など)になると思いがちですが、なりません。exitの引数はCLIの終了コード用で、HTTPレスポンスのステータスとは無関係です。エラーを示したいなら http_response_code() を併用します。
<?php
http_response_code(500); // HTTPステータスを明示
exit("内部エラーが発生しました");
header()リダイレクト後はexitを付ける
リダイレクトで header("Location: ...") を送った後は、必ず exit で処理を止めます。これを忘れると、リダイレクトしても以降のコードが実行され続けてしまい、意図しない処理や情報漏えいの原因になります。
<?php
if (!$loggedIn) {
header("Location: /login.php");
exit; // ← これが無いと以降の処理が続いてしまう
}
使いすぎに注意(アプリ・フレームワーク)
小さなスクリプトでは便利ですが、アプリやフレームワークの中で安易に exit を多用するのは避けましょう。途中で強制終了すると、後続のクリーンアップ処理が飛ばされ、テストもしにくくなります。関数からは return で戻る、エラーは例外(throw)で扱うのが基本です。
die は exit の完全な別名で、動作に違いはありません。チームでどちらかに統一しておくと読みやすくなります(「終了」の意図が伝わりやすい exit が好まれることが多いです)。よくある質問(FAQ)
die は exit の別名で機能は同じです。チーム内で統一するのがおすすめで、「終了」の意図が明確な exit がよく使われます。exit(1) のように整数を渡します(この場合は出力されません)。http_response_code(500) を別途呼んでください。header("Location: ...") の後に exit を入れないと、以降のコードが実行され続けてしまいます。リダイレクト時はセットで書く習慣をつけましょう。まとめ
PHPのexitのポイントを整理します。
exit;でスクリプトを即終了(dieは別名)- 文字列→出力&終了コード0、整数→終了コード(出力なし)
- exitの引数はHTTPステータスに影響しない(
http_response_code()を併用) header()リダイレクト後は必ずexit- アプリ内では多用せず、
returnや例外で扱うのが基本
関連として、リダイレクトを行う方法・headers already sent エラーの対処法・Call to undefined function の対処法もあわせて読むと、PHPの制御・エラー処理に強くなれます。

