header
生の HTTP ヘッダを送信する
&reftitle.description;
voidheader
stringheader
boolreplace&true;
intresponse_code0
header は、生の
HTTP ヘッダを送信するために使用されます。
HTTP ヘッダについての詳細な情報は
HTTP/1.1 仕様
を参照ください。
覚えておいて頂きたいのは、header 関数は、
通常の HTML タグまたは PHP からの出力にかかわらず、すべての実際の
出力の前にコールする必要があることです。
頻出するエラーとして、include
または require 関数、他のファイルをアクセスする関数に
空白または空行があり、header の前に出力が
行われてしまうというものがあります。同じ問題は、単一の PHP/HTML
ファイルを使用している場合でも存在します。
]]>
&reftitle.parameters;
header
ヘッダ文字列。
特殊な header コールが 2 種類あります。最初のものは、
文字列 "HTTP/"
から始まる全てのヘッダ (大文字・小文字は区別されません) です。
このヘッダは、送信する HTTP ステータスコードを示すために使用されます。
例えば、存在しないファイルへのリクエストを処理するためにある PHP
スクリプトを使用するよう (ErrorDocument
ディレクティブにより) Apache を設定する場合、
そのスクリプトが正しいステータスコードを返すようにする必要があります。
]]>
2 番目の特別なヘッダは、"Location:"
ヘッダです。このヘッダがブラウザに返されるだけではなく、
ブラウザに REDIRECT (302) ステータスコードを返します
(201 や 3xx
ステータスコードが既に送信されていない場合にのみ)。
]]>
replace
オプションのパラメータ replace は、ヘッダが
前に送信された類似のヘッダを置換するか、または、同じ形式の二番目の
ヘッダを追加するかどうかを指定します。デフォルトでは、この関数は
置換を行ないますが、二番目の引数に &false; を指定すると、同じ型の
複数のヘッダを強制的に生成します。例えば、
]]>
response_code
HTTP レスポンスコードを強制的に指定の値にします。このパラメータが意味をなすのは
header が空文字列でないときだけであることに注意しましょう。
&reftitle.returnvalues;
&return.void;
&reftitle.errors;
ヘッダを予定通りに送信できなかった場合、
header 関数は
E_WARNING レベルの警告を発生させます。
&reftitle.examples;
ダウンロードダイアログ
PDF ファイルを生成した場合など、
それをダウンロードするかの確認ダイアログを表示させたいことがあるでしょう。
そんな場合は、Content-Disposition
ヘッダを使用してファイル名を指定すると、ブラウザ側でダイアログを表示させることができます。
]]>
キャッシュディレクティブ
PHP スクリプトはしばしば動的に HTML を生成するため、クライアント
ブラウザやサーバーおよびクライアントブラウザの間でプロキシがキャッシュを
行ったりするべきではありません。多くのプロキシとクライアントでは、
以下のコードにより強制的にキャッシュを無効にできます。
]]>
上記のヘッダを全て出力しなかったとしてもページのキャッシュが
行われない場合があることに気付くかもしれません。デフォルトの
ブラウザのキャッシュの動作をユーザーが変更できる手段はいくつもあります。
上記のヘッダを送信することにより、スクリプトの出力がキャッシュされる
可能性がある設定を上書きするべきです。
さらに、session_cache_limiter および
設定 session.cache_limiter を用いると、
セッションが使用された際にキャッシュ関係の正しいヘッダを
自動的に生成させることもできます。
クッキーを設定する
setcookie は、クッキーを設定する便利な方法を提供します。
setcookie がサポートしていない属性をクッキーに設定する方法として、
header が使えます。
たとえば、以下のコードは
Partitioned 属性を含むクッキーを設定します。
]]>
&reftitle.notes;
¬e.network.header.sapi;
出力のバッファリングを使用してこの問題を回避することができます。
この場合、ブラウザへの出力が送信するまでサーバーに
全てバッファリングされるオーバーヘッドがあります。出力バッファリングは、
ob_start と
ob_end_flush をスクリプトでコールするか
&php.ini; またはサーバー設定ファイルの設定ディレクティブ
output_buffering を設定することにより
行うことが可能です。
実際に header が最初にコールされたか
どうかにかかわらず、HTTP ステータスヘッダ行は
クライアントに対し常に最初に送信されます。
HTTP ヘッダが既に送信されていない限り、
header をコールすることでステータスは
常に上書きされます。
最近のクライアントの大半は
Location:
への引数として相対 URI も受け付けますが、
古いクライアントの中にはスキームとホスト名そして絶対パスを含む絶対 URL しか受け付けないものもあります。
通常は、相対 URI から絶対 URI を作成するためには
$_SERVER['HTTP_HOST']、
$_SERVER['PHP_SELF'] および
dirname を使用できます。
]]>
session.use_trans_sid
が有効であったとしても、セッション ID が Location ヘッダとともに
渡されることはありません。SID 定数を使用して
手動で渡す必要があります。
&reftitle.seealso;
headers_sent
setcookie
http_response_code
header_remove
headers_list
HTTP 認証