第8章 リクエスト情報 / 第4回 模擬試験
PHPのヘッダー情報の設定(リダイレクト)に関する次の記述のうち、正しいものはどれか。
リダイレクトを行うには`header("Location: URL")`関数を、HTML出力前に呼び出す必要がある。
正解
リダイレクトは`print`文で任意のタイミングに実行できる。
リダイレクトにはデータベース接続が必須である。
`header()`関数は、HTTPレスポンスボディにのみ影響する関数である。
解説
`header("Location: URL")`は、HTTPレスポンスヘッダーを送信してブラウザにリダイレクトを指示する関数です。HTTPの仕様上、ヘッダーは本文(HTML出力など)より前に送信される必要があるため、`echo`や`print`などによる出力が既に始まった「後」に呼び出すと、「Cannot modify header information - headers already sent」というエラーになります。
他の選択肢が誤りである理由は次の通りです。
・リダイレクトは`print`文では実現できません。あくまでHTTPヘッダーレベルの処理であり、`header()`関数を使う必要があります。
・リダイレクト自体はHTTPヘッダーの送信だけで完結する処理で、データベース接続は必須ではありません。
・`header()`関数はHTTPレスポンスの「ヘッダー」を操作する関数です。「レスポンスボディにのみ影響する」というのは逆で、ボディではなくヘッダーに影響します。
例:
```php
<?php
// この時点でまだHTML出力を開始していないこと
header('Location: /login');
exit;
```
(参照: 独習PHP 第4版 第8章 リクエスト情報 8.4.4節 補足 レスポンスヘッダーを設定する①―リダイレクト p.374〜376)