phpヘッダーの詳細説明
(PHP 3, PHP 4, PHP 5)
header -- 生のHTTPヘッダーの説明を送信します
void header ( string string [, bool replace [, int http_response_code]] )
header () 関数は、生の HTTP ヘッダーを送信するために使用されます。 HTTP ヘッダーの詳細については、HTTP/1.1 仕様を参照してください。
オプションのパラメータ replace は、前の同様のヘッダーを置き換えるか、同じタイプのヘッダーを追加するかを示します。デフォルトは置換ですが、これを FALSE に設定すると、同じタイプの複数のヘッダーが強制的に送信されるようになります。例:
header('WWW-Authenticate: Negotiate');
header('WWW-Authenticate: NTLM', false);
?> 2 番目のオプションのパラメータ http_response_code は、 HTTP 応答コードは指定された値に設定されます (このパラメーターは PHP 4.3.0 の新機能です)。
2 つの特別なヘッダー呼び出しがあります。 1 つ目は文字列「HTTP/」 (大文字と小文字は重要ではありません) で始まるヘッダーで、送信する HTTP ステータス コードを決定するために使用できます。たとえば、PHP を使用してファイルが見つからない場合のエラー処理リクエストを処理するように Apache を構成する場合 (ErrorDocument ディレクティブを使用)、スクリプトが正しいステータス コードを生成することを確認する必要があります。
header("HTTP/1.0 404 Not Found")
?>
注: 実際のヘッダー ( ) が最初に呼び出されます。 HTTP ヘッダーがすでに送信されていない限り、新しいステータス行で header() 関数を呼び出すことで、いつでも上書きできます。
2 番目の特殊なケースは、「Location:」ヘッダーです。このヘッダーをブラウザに送り返すだけでなく、以前に 3xx ステータス コードが発行されていない限り、REDIRECT (302) ステータス コードもブラウザに返します。
header("Location: http://www.example.com/"); /* ブラウザをリダイレクトします*/
/* リダイレクト後に後続のコードが実行されないようにします*/
?>
注: HTTP/1.1 標準では Location: パラメーターとして絶対アドレス URI が必要ですが、一部のクライアントは相対 URI をサポートします。通常、$_SERVER['HTTP_HOST']、$_SERVER['PHP_SELF']、および dirname() 関数を使用して、相対 URI から絶対 URI を自分で生成できます:
header("Location: http://". $ _SERVER['HTTP_HOST']
.
注: セッションが .use_trans_sid 有効になっている場合でも、セッション ID は Location ヘッダー情報とともに渡されません。 SID 定数として手動で渡す必要があります。
PHP スクリプトは通常、ブラウザーやプロキシ サーバーによってキャッシュされてはいけないいくつかの動的コンテンツを生成します。多くのプロキシ サーバーとブラウザは、次の方法でキャッシュを無効にできます:
header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header("Expires: Mon , 26 Jul 1997 05:00:00 GMT"); // 過去の時間
?>
注: 上記のコードがすべて出力されない場合でも、Web ページはバッファリングされていないことがわかります。ブラウザのデフォルトのキャッシュ動作を変更するためにユーザーが設定できるオプションは多数あります。上記のヘッダーを送信することで、スクリプト ページがキャッシュされる可能性のある設定をオーバーライドできるようになります。
また、セッションが使用されている場合、 session_cache_limiter() 関数と session.cache_limiter オプションを使用して、正しいキャッシュ関連のヘッダーを自動的に生成できます。
通常の HTML マークアップ、空白行、PHP のいずれからのものであっても、実際の出力の前に header() を呼び出す必要があることに注意してください。よくある間違いは、include()、require()、またはその他のファイル アクセス関数を通じてコードを読み取るときに、header() を呼び出す前にスペースまたは空行が送信されることです。このエラーは、単一の PHP/HTML ファイルでもよく発生します。
/* header() を呼び出す前に何かが出力されているため、エラーが生成されます
**/
header('Location: http://www.example.com/');
?>
Note : PHP 4 以降、この問題はいくつかの出力バッファリング関数によって解決できます。その代償として、ブラウザへのすべての出力は、送信コマンドが発行されるまでサーバー上にキャッシュされます。この機能を実現するには、コード内で ob_start() および ob_end_flush() を使用するか、php.ini の Output_buffering 構成オプションを変更するか、サーバー構成ファイルを変更します。
生成された PDF ファイルなど、送信されたデータを保存するようにユーザーに要求する場合は、推奨されるファイル名を提供する Content-Disposition ヘッダーを送信することで、ブラウザーにファイル保存ダイアログをポップアップさせることができます。
// これにより、PDF ファイルが直接出力されます
header('Content-type: application/pdf');
// これにより、PDF ファイルをダウンロードするように求められます download.pdf
header('Content -Disposition:attachment; filename="downloaded.pdf"');
// これは、original.pdf のソース ファイルです
readfile('original.pdf');
?> 注: Microsoft Internet Explorer 4.01 のバグにより、このメカニズムは適切に動作できなくなり、解決策はありません。 Microsoft Internet Explorer 5.5 にもこれに影響する脆弱性があり、Service Pack 2 以降にアップグレードすることで解決できます。
注: セーフ モードでは、WWW-Authenticate ヘッダー (HTTP 認証に使用される) が設定されている場合、スクリプトの UID がレルム部分に追加されます。
タグ - PHP、ヘッダー、詳細な説明