ホームページ  >  記事  >  バックエンド開発  >  phpのheader関数の使用例を詳しく解説

phpのheader関数の使用例を詳しく解説

WBOY
WBOYオリジナル
2016-07-25 08:59:04898ブラウズ
  1. Header("Location: http://bbs.it-home.org";);
  2. exit;//回避するために各リダイレクトの後に「exit」を追加しますエラー発生後に実行続けます。
  3. ?>
コードをコピー

2、

  1. header("refresh:2;url=http://bbs.it-home.org");
  2. echo "読み込み中です。しばらくお待ちください...
    自動的にジャンプします3 秒後に プログラマー ホーム ?>
コードをコピー

例 2: IE でページ キャッシュを無効にする 視聴者がプロキシやキャッシュ内のデータではなく、常に最新のコンテンツを取得できるようにするには、次のようにします。

  1. header( '有効期限: 2009 年 12 月 4 日金曜日 09:00:00 GMT' );
  2. header( 'Last-Modified: ' . gmdate( 'D, d M Y H:i: s' ) . ' GMT' );
  3. header( 'キャッシュ制御: ストアなし、キャッシュなし、必須再検証' );
  4. header( 'キャッシュ制御: ポストチェック = 0、事前チェック = 0 ', false );
  5. header( 'Pragma: no-cache' ); //http1.0 および https
  6. と互換性があります?>
コードをコピー

CacheControl = no-cache Pragma=no-cache Expires = - 1 サーバー上の Web ページが頻繁に変更される場合は、Expires を -1 に設定して、即時有効期限が切れることを示します。 Web ページが毎日午前 1 時に更新される場合、有効期限を翌日の午前 1 時に設定できます。 HTTP1.1 サーバーが CacheControl = no-cache を指定すると、ブラウザーは Web ページをキャッシュしません。

古い HTTP 1.0 サーバーは Cache-Control ヘッダーを使用できません。したがって、HTTP 1.0 サーバーとの下位互換性のために、IE は Pragma:no-cache ヘッダーを使用して HTTP に対する特別なサポートを提供します。クライアントが安全な接続 (https://) 経由でサーバーと通信し、サーバーが応答で Pragma:no-cache ヘッダーを返す場合、Internet Explorer は応答をキャッシュしません。 注: Pragma:no-cache は、安全な接続で使用される場合にのみキャッシュを防止します。安全でないページで使用された場合、処理は Expires:-1 と同じになりますが、ページはすぐに期限切れとしてマークされます。

http-equivメタタグ: http-equiv メタを使用して、HTML ページ内の指定された http メッセージ ヘッダーをマークできます。古いバージョンの IE は HTML メタ タグをサポートしていない可能性があるため、http メッセージ ヘッダーを使用してキャッシュを無効にすることをお勧めします。

例 3: ファイルが見つからないというメッセージをユーザーのブラウザに表示させます。 インターネット上の多くの情報には、PHP の関数 header() がブラウザに Status ヘッダーを送信できることが記載されています。 header("ステータス: 404 Not Found") など。ただし、ブラウザーから返される実際の応答は次のとおりです。

  1. header("http/1.1 404 Not Found");
コードをコピー

最初の部分は HTTP プロトコルのバージョン (HTTP-Version) で、2 番目の部分はステータス コード (Status) です。 ); 3 番目の部分は理由フレーズです。

例 4: ユーザーにファイルのダウンロードを許可する (隠しファイルの場所) htmlタグを使用すると、通常のファイルをダウンロードできます。ファイルの機密性を保ち、ファイルのリンクを他の人に知らせたくない場合は、ヘッダー関数を使用してファイルをダウンロードできます。

  1. header("Content-type: application/x-gzip");
  2. header("Content-Disposition:attachment; filename=filename/");
  3. header("Content-Description : PHP3 生成データ");
  4. ?>
コードをコピー

例 4: ヘッダー関数の前にコンテンツを入力 一般に、HTML コンテンツはヘッダー関数の前に出力できません。同様に、setcookie() 関数やセッション関数も出力ストリームにメッセージ ヘッダー情報を追加する必要があります。 header() が実行される前に echo などのステートメントがある場合、後で header() が発生したときに、「警告: ヘッダー情報を変更できません - ヘッダーは既に .... によって送信されました。」エラーが報告されます。つまり、これらの関数の前にテキスト、空白行、復帰などを含めることはできません。exit() 関数を header() 関数の後に追加するのが最善です。たとえば、次の誤った記述では、2 つの PHP コード スニペットの間に空白行があります。

  1. //ここにコードがあります
  2. ?>
  3. //これは空白行である必要があります
  4. header("http/1.1 403 Forbidden");
  5. exit();
コードをコピー

?>

その理由は、PHP スクリプトが実行を開始すると、http メッセージ ヘッダー (タイトル) 情報と本文情報を同時に送信できるためです (header() または SetCookie() 関数からの)。逆に、すぐに送信されると、リストに保存されます。これにより、デフォルトのヘッダー (Content-Type ヘッダーなど) を含むヘッダー情報を変更できます (例: HTML を使用)。または print() 呼び出し)、PHP は最初にすべてのヘッダーを送信し、次に HTTP ヘッダーを終了する必要があり、この時点からヘッダー情報を追加または変更する試みは許可されません。エラーメッセージが 1 つ送信されます。

解決策: php.ini を変更してキャッシュ (output_buffering) をオンにするか、プログラム内でキャッシュ関数 ob_start()、ob_end_flush() などを使用します。原則として、output_buffering が有効な場合、スクリプトが出力を送信するときに PHP は HTTP ヘッダーを送信しません。代わりに、この出力を動的に増加するキャッシュにパイプ処理します (集中出力メカニズムを持つ PHP 4.0 でのみ使用可能)。ヘッダーは実際には送信されないため、ヘッダーを変更/追加したり、Cookie を設定したりすることができます。すべてのスクリプトが終了すると、PHP は自動的に HTTP ヘッダーをブラウザーに送信し、出力バッファーの内容を送信します。

PHP マニュアルのヘッダー関数の小さな例をいくつか紹介します。

1. heder コマンドを使用して、ブラウザーに新しいコンテンツ (キャッシュなし) を使用させます。 URL には一意の番号が追加されるため、毎回新しいコンテンツが読み取られ、キャッシュが回避されます。

  1. print "" //通常はキャッシュファイルが読み取られます
  2. ?>
  3. " //サーバーの閲覧を可能にするための一意の番号を追加しました再リクエスト
  4. w//print "";
  5. ? >
コード
2をコピーして、画像をブラウザに送信して表示します。 ? & Lt;? Php
function pe_img_by_path ($ pe_imgpath = "") {

IF (File_exists ($ PE_IMGPATH)) {

$ iconContent = FILE_GET_CONTENTS ($ PE_IMGPATH ); "コンテンツ タイプ: image/" . $PE_imgarray["extension"]);
header('Content-length: ' . strlen($iconcontent));
echo $iconcontent;
    die(0) ;
  1. }
  2. return false;
  3. }
  4. ?>
  5. コードをコピー
  6. ヘッダー関数の完全かつ包括的なアプリケーション例を添付します。

    1. // ok
    2. header('HTTP/1.1 200 OK');
    3. //404 ヘッダーを設定します:
    4. header('HTTP/1.1 404 Not Found');
    5. //永続的にリダイレクトされるアドレスを設定します
    6. header('HTTP/1.1 301 Moved Permanently');
    7. //新しいアドレスに移動します
    8. header('Location: http://www.baidu.com');
    9. //ファイル遅延リダイレクト:
    10. header('Refresh: 10; url=http://www.example.org/');
    11. print '10 秒後にリダイレクトされます';
    12. //もちろん、次のように実装することもできます。 html 構文
    13. //
    14. header( 'Content-Transfer-Encoding: binary');
    15. // 送信するファイルをロードします:
    16. readfile('example.zip');
    17. // 現在のドキュメントのキャッシュを無効にします
    18. header('Cache-Control: no-cache 、 no-store、max -age=0、must-revalidate');
    19. header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // 過去の日付
    20. header('Pragma: no -cache');
    21. //コンテンツ タイプを設定します:
    22. header('Content-Type: text/html; charset=iso-8859-1');
    23. header('Content-Type: text/html; charset=utf- 8');
    24. header ('Content-Type: text/plain') //プレーンテキスト形式
    25. header('Content-Type: image/jpeg') //JPG 画像
    26. header('Content-Type: application /zip'); // ZIP ファイル
    27. header('Content-Type: application/pdf'); // PDF ファイル
    28. header('Content-Type: audio/mpeg'); // 音声ファイル
    29. header('Content-Type: application/pdf'); -Type: application/x -shockwave-flash'); //Flashアニメーション
    30. //ログインダイアログボックスを表示
    31. header('HTTP/1.1 401 Unauthorized');
    32. header('WWW-Authenticate: Basic realm="Top Secret" "');
    33. print 'ユーザーがキャンセルを押すか、';
    34. print 'が間違ったログインデータを入力した場合に表示されるテキスト';
    35. ?>
    コードをコピー


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。