PHPの基礎 - HTTPヘッダ
ナビゲーションに移動
検索に移動
概要
PHPの設定
php.iniファイルで、header
関数が無効化されている場合がある。
php.iniファイル内のoutput_buffering
ディレクティブを有効にして、Default Value
の値をOn
に設定する。
# 編集前
; output_buffering
; Default Value: Off
; Development Value: 4096
; Production Value: 4096
# 編集後
output_buffering
Default Value: On
Development Value: 4096
Production Value: 4096
header関数
header
関数は、HTTPヘッダを送信するために使用される組み込み関数である。
HTTPヘッダは、クライアントとサーバ間の通信に関する追加情報を提供する。
header
関数は、HTTPヘッダを操作するための強力な関数であり、リダイレクト、コンテンツタイプの指定、キャッシュ制御、ファイルのダウンロード等、様々な用途で使用される。
適切に使用することにより、Webアプリケーションの動作を制御して、ユーザーエクスペリエンスを向上させることができる。
header
関数の一般的な構文を以下に示す。
header("<HTTPヘッダフィールド>: <HTTPヘッダの値>");
header
関数は、様々な用途で使用される。
- リダイレクト
- URLへのリダイレクト
- 例えば、
header("Location: http://example.com");
と記述することにより、指定したURLにリダイレクトされる。
- コンテンツタイプの指定
- 応答のコンテンツタイプを指定することができる。
- 例えば、
header("Content-Type: application/json");
と記述することにより、応答がJSONフォーマットであることを示す。
- キャッシュ制御
- キャッシュ制御ヘッダを設定することができる。
- 例えば、
header("Cache-Control: no-cache");
と記述することにより、応答がキャッシュされないことを示す。
- ファイルのダウンロード
- ファイルをダウンロードするためのヘッダを設定することができる。
- 例えば、
header("Content-Disposition: attachment; filename='example.txt'");
と記述することにより、指定したファイル名でファイルがダウンロードされる。
header
関数の注意
header
関数は、出力 (echo
、print
、HTMLタグ等) が行われる前に呼び出す必要がある。
1度でも出力が行われた後にheader
関数を呼び出すと、"Headers already sent"エラーが発生する。header
関数は、複数回呼び出すことができる。
複数のヘッダを設定する場合は、それぞれのヘッダに対してheader
関数を呼び出す。
エラー
リダイレクト
header("Location: xxx.php");
を実行しても、ページにリダイレクトしない場合がある。
- 相対パスの問題
- リダイレクト先のファイルパスが正しくない可能性がある。
- PHPファイルからの相対パスを指定するか、絶対パスを指定して確認すること。
- 出力が行われている
header
関数を呼び出す前に、何らかの出力 (HTMLタグ、空白文字、PHPタグの外側の空白文字等) が行われている可能性がある。header
関数は、出力が行われる前に呼び出す必要がある。- 出力が行われた後に
header
関数を呼び出すと、"headers already sent"エラーが発生する。 - これは、PHPファイルの先頭に
ob_start();
を記述して、出力バッファリングを有効にすることにより、この問題を回避できる場合がある。
- リダイレクト先のファイルが存在しない
- ファイル名の誤りや、ファイルが別のディレクトリにある可能性があるため、リダイレクト先のPHPファイルが実際に存在することを確認する。
- Webブラウザのキャッシュ
- Webブラウザがリダイレクトをキャッシュしている可能性がある。
- Webブラウザのキャッシュをクリアする、または、シークレットウィンドウやシークレットタブを使用して再度アクセスすること。
これらの点を確認して、必要に応じて修正することにより、header
関数によるリダイレクトが正しく動作するはずである。
もし、問題が解決しない場合は、エラーメッセージやログを確認して、詳細な情報を収集すること。