任意の 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 があった場合だけ、それを使うようにします。
[ もどる ]