任意の HTTP ヘッダーを返す - PHP5 プログラミング

PROGRAM


PHP で任意の HTTP ヘッダーを返す

PHP5 では header 関数を使って、応答時に返す HTTP ヘッダーを調整できるようになっています。

この header 関数を使うときには、他のテキストデータ等を echo 関数などで出力するよりも前に実行する必要があります。

<?php> タグの外に HTML を書く場合も同様で、header 関数を使う <?php> タグより前に HTML を記載しても期待通りに動かないので注意してください。

Content-Type

JavaScript で Ajax などをやっていると、データを XML で返す時に Content-Type を "text/xml" にして返さないと、JavaScript 側で responseXML プロパティを参照したときに null になってしまうことがあります。

また、バイナリデータを直接書き出して "image/png" 形式の応答を返したい場合もあるかもしれません。

 

そのようなときには、次のようにして、応答するコンテンツの種類を明示します。

header('Content-Type: text/xml; charset=utf-8');

これを <?xml> タグなどのコンテンツデータよりも前で実行することで、Web サーバーがこのコンテンツを応答として返す時に、ここで指定した Content-Type がブラウザに送られます。

 

ステータスコード

Web ページが引っ越したことを通知したり、PHP の処理でエラーが発生したことを伝えるために、HTTP のステータスコードを変更したい場合があります。

そのようなときにも header 関数を使って調整します。

header($_SERVER['SERVER_PROTOCOL'] . " 301 Moved Permanently"

引数に渡す文字列は "HTTP/1.1 301 Moved Permanently" というように、HTTP バージョン情報うに続けって、ステータスコード、説明を記載します。

このとき $_SERVER['SERVER_PROTOCOL'] を使って、ブラウザが要求した HTTP バージョン文字列が "HTTP/1.1" といった形式で取得できるので、ここではそれを利用しています。

 

ステータスコードには、必ず正しい意味の数字を 3 桁でしていします。

また、説明のところは任意のテキストでも大丈夫ですが、どのステータスコードならどのメッセージという一般的な対応付けがあるので、それと合わせておくと簡単です。

これらのステータスコードについては Web サーバが返す値 に、かんたんに整理してあるので参考にしてください。

 

なお、php ファイルを Web サーバーからではなく php コマンドを使って実行した場合には、header 関数の内容は無視されますが、先ほどの "$_SERVER['SERVER_PROTOOL']" のところで 'SERVER_PROTOCOL' が見つからないというエラーになります。

このエラーを回避したい場合には、array_key_exists('SERVER_PROTOCOL', $_SERVER) という関数で条件分岐して、SERVER_PROTOCOL があった場合だけ、それを使うようにします。


[ もどる ]