この記事では、PHP 言語における header 関数の役割と使用法をまとめます。
php header() 関数の具体的な機能は、元の HTTP ヘッダー [Http Header] をクライアントに送信することです。
ヘッダーは、HTTP プロトコルを使用して HTML データをブラウザーに送信する前にサーバーによって送信される文字列です。ヘッダーと HTML ファイルの間には空行が必要です。 header() 関数は、実際の出力が送信される前に呼び出されます (PHP 4 以降では、出力キャッシュを使用してこの問題を解決できます)。
ヘッダーの一般的な使用例をいくつか示します:
(1) ヘッダーを使用してリダイレクトを実装します (アドレス バーに URL を入力してユーザーを置き換えることと同等)。
<?php header("Location:http://www.Alixixi.com/mysql/407.html";); exit;//注意务必在每个重定向之后都必须加上exit,避免发生错误后,代码会继续向下执行 ?>
<?php /** @title:PHP实现定时跳转 @功能:等待指定的时间,然后再跳转到指定页面(代替html meta方式) */ header("refresh:3;url=http://www.Alixixi.com/javascript-function/605.html"); echo '正在加载,请稍等...<br>三秒后自动跳转'; /* 说明:若等待时间为0,则与header("location:")等效。 */ ?>
(2) ブラウザでのページのキャッシュを禁止します。
ビジネス ニーズにより、訪問者がプロキシやキャッシュ内の情報ではなく、ページを参照するたびに最新情報を取得する場合は、次のヘッダーを使用できます:
<?php header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); header('Cache-Control: no-store, no-cache, must-revalidate'); header('Cache-Control: post-check=0, pre-check=0', false ); header('Pragma: no-cache'); //兼容http1.0和https ?>
実際、ここで重要なことは、次のオプションの値を設定することです:
CacheControl = キャッシュなし
プラグマ=キャッシュなし
有効期限 = -1
HTTP1.1 サーバーが CacheControl = no-cache を指定すると、ブラウザは Web ページをキャッシュしません。レガシー HTTP 1.0 サーバーは Cache-Control ヘッダーを使用できません。したがって、HTTP 1.0 サーバーとの下位互換性のために、IE は Pragma:no-cache ヘッダーを使用して HTTP に対する特別なサポートを提供します。
キャッシュ制御の詳細については、このサイトの記事を参照してください:
Web ページのキャッシュ制御 キャッシュ制御の共通値には、private、no-cache、max-age、must-revalidate が含まれます。
クライアントが安全な接続 (https://) 経由でサーバーと通信し、サーバーが応答で Pragma:no-cache ヘッダーを返す場合、Internet Explorer は応答をキャッシュしません。注: Pragma:no-cache は、安全な接続で使用される場合にのみキャッシュを防止します。安全でないページで使用された場合、処理は Expires:-1 と同じになりますが、ページはすぐに期限切れとしてマークされます。有効期限は、サーバー上の Web ページが頻繁に変更される場合は、即時有効期限を示すように -1 に設定すると便利です。 Web ページが毎日午前 1 時に更新される場合、有効期限を翌日の午前 1 時に設定できます。
(3) ユーザーのブラウザにファイルが見つからないというメッセージを表示させます。
インターネット上の多くの情報には、次のように書かれています。PHP の関数 header() は、header("Status: 404 Not Found") などのステータス ヘッダーをブラウザに送信できます。しかし、ブラウザから返される応答は実際には次のとおりであることがわかりました:HTTP/1.x 200 OK
日付: 2006 年 8 月 3 日木曜日 07:49:11 GMT
サーバー: Apache/2.0.55 (Win32) PHP/5.0.5
X-Powered-By: PHP/5.0.5
ステータス: 404 見つかりません
コンテンツの長さ: 0
キープアライブ: タイムアウト=15、最大=98
接続: キープアライブ
Content-Type: text/html
header("http/1.1 404 が見つかりません");
最初の部分は HTTP プロトコルのバージョン (HTTP-Version)、2 番目の部分はステータス コード (Status)、3 番目の部分は理由フレーズ (Reason-Phrase) です。
(4) 訪問者にアーカイブをダウンロードさせます (ファイルの場所を非表示にします)。
通常のファイルは元の URL を通じてダウンロードできることは誰もが知っていますが、ファイルの保存場所をサーバー上で秘密にしておく必要がある場合、ここでファイル リンクを直接表示することはできません。 header 関数 ファイル アドレスによってファイルのダウンロードも可能になります。具体的なコードは次のとおりです:
<?php header("Content-type: application/x-gzip"); header("Content-Disposition: attachment; filename=Alixixi.zip"); header("Content-Description: PHP3 Generated Data"); ?>
PHP ファイルダウンロード関数(コード)
あまり一般的ではないヘッダーの使用例をいくつか示します:
<?php // ok 200 header('HTTP/1.1 200 OK'); //设置一个404头: header('HTTP/1.1 404 Not Found'); //设置地址被永久的重定向 header('HTTP/1.1 301 Moved Permanently'); //文档语言 header('Content-language: en'); //告诉浏览器最后一次修改时间 $time = time() - 60; // or filemtime($fn), etc header('Last-Modified: '.gmdate('D, d M Y H:i:s', $time).' GMT'); //告诉浏览器文档内容没有发生改变 header('HTTP/1.1 304 Not Modified'); //设置内容长度 header('Content-Length: 1234'); //设置内容类型: header('Content-Type: text/html; charset=iso-8859-1'); header('Content-Type: text/html; charset=utf-8'); header('Content-Type: text/plain'); //纯文本格式 header('Content-Type: image/jpeg'); //JPG图片 header('Content-Type: application/zip'); // ZIP文件 header('Content-Type: application/pdf'); // PDF文件 header('Content-Type: audio/mpeg'); // 音频文件 header('Content-Type: application/x-shockwave-flash'); //Flash动画 ?>