以下のサイトに記載してある通りですが、
header()関数はHTTPのヘッダ情報を送信するために使用する関数です。
PHP マニュアル > ネットワーク 関数
ブラウザの画面にページを表示させる際には、
通常、ブラウザからWEBサーバに対してページを表示するための情報を要求し、
要求を受けたWEBサーバは、そのページを表示するための情報をブラウザに返します。
それにより、私たちは何か知りたい情報があれば、ブラウザ上で検索して閲覧できるようになっています。
このブラウザからの要求を「HTTPリクエスト」と呼び、
さらに、WEBサーバからブラウザに返される情報を「HTTPレスポンス」と呼びます。
この「HTTPリクエスト」や「HTTPンレスポス」の中にはHTTPヘッダと呼ばれるヘッダ情報が含まれており、
header()関数では、このHTTPヘッダを送信することが可能です。
こちらは、「HTTPレスポス」のヘッダ情報の例です。
cache-control: no-cache, must-revalidate, max-age=0
connection: Keep-Alive
content-encoding: gzip
content-type: text/html; charset=UTF-8
date: Thu, 27 Dec 2018 03:59:48 GMT
expires: Wed, 11 Jan 1984 05:00:00 GMT
keep-alive: timeout=5, max=100
referrer-policy: strict-origin-when-cross-origin
server: Apache
transfer-encoding: chunked
vary: Accept-Encoding
x-frame-options: SAMEORIGIN
200 OK
コンテンツ
header()関数でよく行う処理
文字コード
header("Content-type: text/html; charset=utf-8");
で、「Content-type」の文字コードの指定が可能です。
PHPで組んでいるページで文字化けが起こる場合には、
このようにheader関数で文字コードを明示的に指定すれば解決します。
Locationヘッダでリダイレクト(転送)設定
Locationを指定したリダイレクト処理を行う機会は非常に多いです。
例えば、会員サイトでのログイン処理やエラー発生時のエラーが面へリダイレクト設定などで利用します。
<?php
header("Location: http://www.example.com/");
exit(); ←重要
?>
exit()を忘れずに設定して下さい。
処理を切っておかないと、リダイレクトさせた後でも、
header("Location: http://www.example.com/~");
より後に書かれた処理は実行されてしまいます。
<?php
header("Location: /");
exit();
?>
とすれば、トップページにリダイレクトします。
301、404、500のステータスコードを指定
ステータスコードは、.htaccessで設定することが多いですが、
PHPのheader()関数で出力することも可能です。
<?php
header("HTTP/1.1 301 Moved Permanentl");
exit;
?>
<?php
//404エラーの場合
header("HTTP/1.0 404 Not Found");
exit();
?>
<?php
//500エラーの場合
header("HTTP/1.0 500 Internal Server Error");
exit();
?>
ファイルのダウンロード
ZIPやCSV、PDF、画像などのファイルをダウンロードさせる処理を実装する機会も多いです。
そのような場合には、以下のコードで対応可能です。
■ZIPファイルをダウンロードする場合のサンプルコードです
<?php
header("Content-type: application/zip");
header("Content-Disposition: attachment; filename=\"example.zip\"");
header("Content-length: " . filesize("ファイルパス"));
readfile($file);
exit;
?>
※「example.zip」は、ダウンロード時の「ファイル名」を設定。
※「ファイルパス」には、サーバ上のファイルパスを設定
■CSVファイルをダウンロードする場合のサンプルコードです
<?php
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename=\"example.csv\"");
header("Content-Length: " . filesize("ファイルパス"));
readfile($file);
exit;
?>
※「example.csv」は、ダウンロード時の「ファイル名」を設定。
※「ファイルパス」には、サーバ上のファイルパスを設定
■PDFファイルをダウンロードする場合のサンプルコードです
<?php
header("Content-Type: application/pdf");
header("Content-Disposition: attachment; filename=\"example.pdf\"");
header("Content-Length: " . filesize("ファイルパス"));
readfile($file);
exit;
?>
※「example.pdf」は、ダウンロード時の「ファイル名」を設定。
※「ファイルパス」には、サーバ上のファイルパスを設定
■JPEGファイルをダウンロードする場合のサンプルコードです
<?php
header("Content-Type: application/force-download");
header("Content-Disposition: attachment; filename=\"example.jpg\"");
header("Content-Length: " . filesize("ファイルパス"));
readfile($file);
exit;
?>
※「example.jpg」は、ダウンロード時の「ファイル名」を設定。
※「ファイルパス」には、サーバ上のファイルパスを設定
この記事へのコメントはありません。