HTTPヘッダ情報を送るのに使うのがheader()関数です。
header(ヘッダ[,フラグ(論理値(TRUE/FALSE))][,レスポンスコード]);
void header ( string $string [, bool $replace = true [, int $http_response_code ]] )
<?php if($value == 1){ header("Location: http://aaa.bbb.com/ccc.html"); //そこから後のプログラムを実行させないようにする exit; } ?>
if(value == 1){ window.location.href = "http://aaa.bbb.com/ccc.html"; }
PHPでは動的にページを生成するため、ブラウザのページキャッシュを行いたくない場合があります。キャッシュされるとせっかく内容を変えて出力しても、ページが更新されず古い情報が表示されてしまうからです。header()関数を使用すると、強制的にキャッシュを無効にできます。
「Expire」を指定するとキャッシュの有効期限を設定できます。過去の日付を指定すると、強制的にキャッシュを無効にできます。ただし、せっかくキャッシュを無効にしても、ブラウザの種類やユーザの設定等により、header()関数でのキャッシュの動作が無効になる場合があります。
header("Cache-Control: no-chache, must-revalidate");
header("Pragma: no-cache");
header("Expires: Mon, 26 Jul 2007 05:00:00 GMT");
header()関数はすべての出力の前にコールする必要があります。
BASIC認証とは、許可したユーザIDとパスワードを入力した時だけ特定のページにアクセスできるというApacheの認証システムです。
WWW-Authenticaseヘッダを使うと、ユーザIDとパスワードを入力する子画面が起動します。
子画面で入力したユーザIDとパスワードはWebサーバに保存され、PHPでは「$_SERVER["PHP_AUTH_USER"]」(ユーザID)「$_SERVER["PHP_AUTH_PW"]」(パスワード)のスーパーグローバル変数で取得することができます。
ユーザID | $_SERVER["PHP_AUTH_USER"] |
パスワード | $_SERVER["PHP_AUTH_PW"] |
<?php //ユーザIDが空か、ユーザIDとパスワードが異なっているとき、認証ダイアログを表示 if(!isset($_SERVER["PHP_AUTH_USER"]) || !($_SERVER["PHP_AUTH_USER"] == "peco" && $_SERVER["PHP_AUTH_PW"] == "rose")){ header("WWW-Authenticate: Basic realm=\"PHP TEST\""); header("HTTP/1.0 401 Unauthorized"); echo "ユーザIDまたはパスワードが正しくありません"; exit; } header("Location: http://www.sotechsha.co.jp/"); ?>
「isset」は、変数がセットされているかどうかを検索する関数です。変数がセットされていたらTRUE、そうでなければFALSEを返します。
サイト上にCSVファイルやPDFファイルなどを置いて、ダウンロードさせるダイアログボックスを表示させるときにもheader()関数を利用できます。
<?php //CSVで出力 header("Content-type: application/csv"); //abc.csvという名前で保存 header("Content-Disposition: attachment; filename=\"abc.csv\""); ?> 111,222 333,444 555,666
<?php //CSVで出力 header("Content-type: application/csv"); //abc.csvという名前で保存 header("Content-Disposition: attachment; filename=\"abc.csv\""); //aaa.csvファイルの内容を出力 @readfile("aaa.csv"); ?>
content-typeには、MIMEによって定義されたファイルタイプを指定します。ファイルタイプを指定することにより、「これから渡すファイルはXXという種類です」とクライアント側に教えることができます。それにより、ブラウザに表示したり、他のソフトウェアが起動したりという動作をします。
例:HTMLファイルを指定する場合 | content-type | 動作 |
ブラウザにHTMLファイルとして表示したい場合 | text/html | HTMLで書かれていると判断される |
ブラウザにHTMLファイルのソースコードを表示したい場合 | text/plain | ただのテキストと判断される |
ダウンロードするかどうかの確認画面を表示したい場合 | application/octet-stream | ダウンロード確認が必要と判断される |
「application/octet-stream」は未知のバイナリタイプファイルなので、ユーザに「どうしたらよいか?」という指示を仰ぐため、ダウンロード画面が表示されます。この場合Content-Dispositionヘッダーを出力しなくてもファイルタイプに関わらずダウンロード画面が表示されます。(ただし、デフォルトのファイル名や拡張子はスクリプトのファイル名や拡張子が表示されます)。よく使われるcontent-typeには、以下のようなものがあります。
ファイル形式 | 拡張子 | content-type(MIMEタイプ) |
テキスト | txt | text/plain |
HTML | htm、html | text/html |
CSS | css | text/css |
XML | xml | text/xml |
JavaScript | js | text/javascript |
JPEG画像 | jpg、jpeg | text/jpeg |
GIF画像 | gif | text/gif |
PNG画像 | png | text/png |
Excel | xls | text/x-excel |
Word | doc | text/msword |
パワーポイント | ppt | text/vnd.ms-powerpoint |
CSV | csv | text/csv |
text/pdf | ||
ZIP圧縮 | zip | text/zip |