戻る

HTTPヘッダ

header()関数

HTTPヘッダ情報を送るのに使うのがheader()関数です。

header()関数の構文

		header(ヘッダ[,フラグ(論理値(TRUE/FALSE))][,レスポンスコード]);

		void header ( string $string [, bool $replace = true [, int $http_response_code ]] )

指定URLへのジャンプ(リダイレクト)

PHP

<?php
if($value == 1){
	header("Location: http://aaa.bbb.com/ccc.html");
	
	//そこから後のプログラムを実行させないようにする
	exit;
}
?>

JavaScript

if(value == 1){
	window.location.href = "http://aaa.bbb.com/ccc.html";
}

ページキャッシュを無効にする

PHPでは動的にページを生成するため、ブラウザのページキャッシュを行いたくない場合があります。キャッシュされるとせっかく内容を変えて出力しても、ページが更新されず古い情報が表示されてしまうからです。header()関数を使用すると、強制的にキャッシュを無効にできます。

「Expire」を指定するとキャッシュの有効期限を設定できます。過去の日付を指定すると、強制的にキャッシュを無効にできます。ただし、せっかくキャッシュを無効にしても、ブラウザの種類やユーザの設定等により、header()関数でのキャッシュの動作が無効になる場合があります。

強制的にキャッシュを無効:HTTP/1.1

header("Cache-Control: no-chache, must-revalidate");

強制的にキャッシュを無効:HTTP/1.0

header("Pragma: no-cache");

期限以後のキャッシュを破棄(過去の日付を指定する)

header("Expires: Mon, 26 Jul 2007 05:00:00 GMT");

header()関数はすべての出力の前にコールする必要があります。

BASIC認証

BASIC認証とは、許可したユーザIDとパスワードを入力した時だけ特定のページにアクセスできるというApacheの認証システムです。

WWW-Authenticaseヘッダを使うと、ユーザIDとパスワードを入力する子画面が起動します。

子画面で入力したユーザIDとパスワードはWebサーバに保存され、PHPでは「$_SERVER["PHP_AUTH_USER"]」(ユーザID)「$_SERVER["PHP_AUTH_PW"]」(パスワード)のスーパーグローバル変数で取得することができます。

ユーザIDとパスワードを取得するスーパーグローバル変数

ユーザ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()関数

「isset」は、変数がセットされているかどうかを検索する関数です。変数がセットされていたらTRUE、そうでなければFALSEを返します。

保存ダイアログの表示

サイト上にCSVファイルやPDFファイルなどを置いて、ダウンロードさせるダイアログボックスを表示させるときにもheader()関数を利用できます。

アクセスしたファイルをCSVファイルとしてダウンロード

<?php
//CSVで出力
header("Content-type: application/csv");

//abc.csvという名前で保存
header("Content-Disposition: attachment; filename=\"abc.csv\"");
?>
111,222
333,444
555,666

別ファイルを読み込んでCSVファイルとしてダウンロード

<?php
//CSVで出力
header("Content-type: application/csv");

//abc.csvという名前で保存
header("Content-Disposition: attachment; filename=\"abc.csv\"");

//aaa.csvファイルの内容を出力
@readfile("aaa.csv");
?>

その他のcontent-type

content-typeには、MIMEによって定義されたファイルタイプを指定します。ファイルタイプを指定することにより、「これから渡すファイルはXXという種類です」とクライアント側に教えることができます。それにより、ブラウザに表示したり、他のソフトウェアが起動したりという動作をします。

例:HTMLファイルを指定する場合content-type動作
ブラウザにHTMLファイルとして表示したい場合text/htmlHTMLで書かれていると判断される
ブラウザにHTMLファイルのソースコードを表示したい場合text/plainただのテキストと判断される
ダウンロードするかどうかの確認画面を表示したい場合application/octet-streamダウンロード確認が必要と判断される

「application/octet-stream」は未知のバイナリタイプファイルなので、ユーザに「どうしたらよいか?」という指示を仰ぐため、ダウンロード画面が表示されます。この場合Content-Dispositionヘッダーを出力しなくてもファイルタイプに関わらずダウンロード画面が表示されます。(ただし、デフォルトのファイル名や拡張子はスクリプトのファイル名や拡張子が表示されます)。よく使われるcontent-typeには、以下のようなものがあります。

ファイル形式拡張子content-type(MIMEタイプ)
テキストtxttext/plain
HTMLhtm、htmltext/html
CSScsstext/css
XMLxmltext/xml
JavaScriptjstext/javascript
JPEG画像jpg、jpegtext/jpeg
GIF画像giftext/gif
PNG画像pngtext/png
Excelxlstext/x-excel
Worddoctext/msword
パワーポイントppttext/vnd.ms-powerpoint
CSVcsvtext/csv
PDFpdftext/pdf
ZIP圧縮ziptext/zip

inserted by FC2 system