検索
ホームページバックエンド開発PHPチュートリアルPHP_PHP チュートリアルで画像ブラウザーのキャッシュを設定する方法の概要

PHP_PHP チュートリアルで画像ブラウザーのキャッシュを設定する方法の概要

Jul 13, 2016 pm 04:57 PM
apacheiisphp導入あなたは誰ですか使用写真開ける方法ブラウザキャッシュ設定まだ

PHP を使用してブラウザのキャッシュを開く場合でも、Apache または iis サーバー環境を使用して設定する場合でも、ブラウザの Cache-Control に基づいて動作します。PHP で画像ブラウザのキャッシュを設定する方法を紹介します

Cache-。コントロール

キャッシュ制御は最も重要なルールです。このフィールドは、すべてのキャッシュ メカニズムが要求/応答チェーン全体で従う必要がある命令を指定するために使用されます。これらのディレクティブは、キャッシュによるリクエストや応答への悪影響を防ぐ動作を指定します。これらのディレクティブは通常、デフォルトのキャッシュ アルゴリズムをオーバーライドします。キャッシュ ディレクティブは一方向です。つまり、リクエストにディレクティブが存在しても、同じディレクティブが応答に存在するとは限りません。

キャッシュ制御の定義は次のとおりです: Cache-Control = "Cache-Control" ":" キャッシュ ディレクティブ。表 1 に適用可能な値を示します。

表 1. 一般的に使用されるキャッシュ ディレクティブの値
キャッシュディレクティブ 手順
公開 すべてのコンテンツはキャッシュされます
プライベート コンテンツはプライベートキャッシュにのみキャッシュされます
キャッシュなし コンテンツはキャッシュされません
無店舗 キャッシュやインターネット一時ファイルにコンテンツはキャッシュされません
必須再検証/プロキシ再検証 キャッシュされたコンテンツが無効になった場合、再検証のためにリクエストをサーバー/プロキシに送信する必要があります
max-age=xxx (xxx は数字) キャッシュされたコンテンツは xxx 秒後に期限切れになります。このオプションは HTTP 1.1 でのみ使用でき、Last-Modified と一緒に使用すると優先度が高くなります

クライアントがブラウザ経由で最初の URL リクエストを行うと、HTTP プロトコルの規定に従って、ブラウザはヘッダー (HTTP リクエスト ヘッダー) をサーバーに送信し、サーバーはそれに応答して関連する属性タグを記録します。 (HTTP 応答ヘッダー)。サーバーからの戻りステータスは 200 で、次のような形式になります:

コードは次のとおりです コードをコピー

HTTP/1.1 200 OK
日付: 2009 年 3 月 3 日火曜日 04:58:40 GMT
コンテンツタイプ: 画像/jpeg
コンテンツの長さ: 83185
最終更新日: 2009 年 2 月 24 日火曜日 08:01:04 GMT
キャッシュ制御: max-age=2592000
有効期限: 2009 年 4 月 2 日(木) 05:14:08 GMT
Eタグ: 「5d8c72a5edda8d6a:3239」


クライアントがこの URL を 2 度目にリクエストすると、HTTP プロトコルの規定に従って、ブラウザはサーバーにヘッダー (Http リクエスト ヘッダー) を送信し、サーバーはそれに応答し、関連するレコード属性タグ ファイルが作成されていないことを記録します。サーバーは、キャッシュからの読み取りから直接 304 を返します:

コードは次のとおりです コードをコピー

HTTP/1.x 304 は変更されていません
日付: 2009 年 3 月 3 日火曜日 05:03:56 GMT
コンテンツタイプ: 画像/jpeg
コンテンツの長さ: 83185
最終更新日: 2009 年 2 月 24 日火曜日 08:01:04 GMT
キャッシュ制御: max-age=2592000
有効期限: 2009 年 4 月 2 日(木) 05:14:08 GMT
Eタグ: 「5d8c72a5edda8d6a:3239」


1. Last-Modified、Expires、Etag に関連する動作原則
1.最終更新日
ブラウザが初めて URL をリクエストしたとき、サーバーから返されるステータスは 200 です。コンテンツはリクエストしたリソースであり、Last-Modified 属性マーク (このファイルの最終更新日時) があります。サービス終了時間と形式は次のようになります:

1 最終更新日: 火曜日、2009 年 2 月 24 日 08:01:04 GMT
クライアントがこの URL を 2 度目にリクエストすると、HTTP プロトコルの規定に従って、ブラウザは If-Modified-Since ヘッダー (HTTP リクエスト ヘッダー) をサーバーに送信して、この時点以降にファイルが変更されたかどうかを尋ねます。 :

1 If-Modified-From: 火曜日、2009 年 2 月 24 日 08:01:04 GMT
サーバー側のリソースが変更されていない場合、HTTP 304 (Not Changed.) ステータス コードが空の内容で自動的に返されるため、送信されるデータ量が節約されます。サーバー側のコードが変更されるか、サーバーが再起動されると、リソースが再発行され、最初のリクエストと同様のものが返されます。これにより、リソースがクライアントに繰り返し送信されなくなり、サーバーが変更されたときにクライアントが最新のリソースを取得できるようになります。

注: If-Modified-Since の時刻がサーバーの現在時刻 (現在のリクエスト時刻 request_time) より遅い場合、不正なリクエストとみなされます

2. Etagの動作原理

HTTP プロトコル仕様では、ETag を「要求された変数のエンティティ タグ」として定義しています (14.19 を参照)。

簡単なことは、サーバーが応答するときにリクエスト URL をマークし、それをサーバーから返される形式と同様の HTTP 応答ヘッダーでクライアントに送信することです。

1 Eタグ: “5d8c72a5edda8d6a:3239”

クライアントのクエリ更新形式は次のとおりです:

None 一致の場合 1 件: 「5d8c72a5edda8d6a:3239」

ETag が変更されていない場合は、ステータス 304 が返されます。
つまり、クライアントがリクエストを行った後、HTTP レスポンス ヘッダーには Etag: “5d8c72a5edda8d6a:3239”
が含まれます。 この識別子は、取得したリソースの ID が 5d8c72a5edda8d6a:3239 であることをクライアントに伝えるのと同じです。

次回同じ URI のリクエストを送信する必要がある場合、ブラウザは If-None-Match ヘッダー (Http Request Header) も送信します。このとき、ヘッダー内の情報には前回のアクセスで取得した Etag が含まれます。 : "5d8c72a5edda8d6a:3239"。

None 一致の場合 1 件: 「5d8c72a5edda8d6a:3239」

このようにして、クライアント側は 2 つのコピーをキャッシュし、サーバー側は 2 つの etag を比較します。 If-None-Match が False の場合、200 は返されませんが、304 (Not Modified) 応答が返されます。

3、有効期限があります

指定された日付/時刻を過ぎると、応答は古いとみなされます。有効期限など: 2009 年 4 月 2 日木 05:14:08 GMT
Last-Modified と組み合わせて使用​​する必要があります。リクエストされたファイルの有効期限を制御するために使用され、リクエストされたデータが有効期間内である場合、クライアントのブラウザは、キャッシュ内のデータが無効または期限切れの場合に、サーバーの代わりにキャッシュにデータをリクエストします。サーバーからのデータ。

4、最終更新日と期限切れ

Last-Modified フラグは帯域幅を少し節約できますが、HTTP リクエストの送信から逃れることはできないため、Expires と併用する必要があります。 Expires フラグを使用すると、たとえば、ユーザーが F5 キーを押すか [更新] ボタンをクリックした場合でも、Expires を持つ URI に対しても HTTP リクエストが送信されなくなります。したがって、Last-Modified が必要になります。を使用し、Expires と一緒に使用する必要があります。

5、Etag と有効期限

Etag と Expires の両方がサーバー側で設定されている場合、Etag の原理は同じです。つまり、Last-Modified/Etag に対応する Http リクエスト ヘッダー: If-Modified-Since および If-None-Match です。これら 2 つのヘッダーの値は、Web サーバーによって送信された Last-Modified 値と Etag 値とまったく同じであることがわかります。サーバーは、If-Modified-Since と If-None- が完全に一致した場合にのみ返されます。つまり、変更時刻と Etag を確認した後に一致します。

6、最終更新日とEtag

Last-Modified は ETags リクエストの http ヘッダーと一緒に使用され、サーバーは最初に Last-Modified/Etag タグを生成して、ページが変更されたかどうかを判断し、ファイルを継続するかどうかを決定します。キャッシュされました

プロセスは次のとおりです:

1. クライアントはページを要求します (A)。
2. サーバーはページ A を返し、Last-Modified/ETag を A に追加します。
3. クライアントはページを表示し、Last-Modified/ETag とともにページをキャッシュします。
4. クライアントはページ A を再度リクエストし、最後のリクエスト中にサーバーから返された Last-Modified/ETag をサーバーに渡します。
5. サーバーは Last-Modified または ETag をチェックし、最後のクライアント要求以降ページが変更されていないと判断し、応答 304 と空の応答本文を直接返します。

注:

1. Last-Modified ヘッダーと Etag ヘッダーは両方とも Web サーバーによって発行される Http 応答ヘッダーです。Web サーバーは両方のヘッダーを同時にサポートする必要があります。
2. Web サーバーが Last-Modified/Etag ヘッダーをクライアントに送信した後、クライアントはこれらのヘッダーをキャッシュします。 3. クライアントが同じページに対するリクエストを再度開始すると、HTTP リクエスト ヘッダー、つまり Last-Modified/Etag にそれぞれ対応する If-Modified-Since および If-None-Match が送信されます。これら 2 つのヘッダーの値は、Web サーバーによって送信された Last-Modified および Etag の値とまったく同じであることがわかります。 4. 上記の値を使用してサーバー側でファイルがキャッシュされ続けるかどうかを確認します
;

2. 非リアルタイムのインタラクティブな動的ページでの Epires と Etag の処理
タグの分類やアーカイブなど、頻繁に更新されないデータの場合は、キャッシュすることを検討できます。簡単なポイントは、非リアルタイムの対話型動的プログラムで有効期限と etag 識別子を出力し、それらをキャッシュさせることです。 ただし、http ヘッダーに http 応答のセッション ID が含まれないように、セッションを閉じることに注意する必要があります。

3.1、期限切れ

例:expires.php

コードは次のとおりですコードをコピー 3.2.Eタグ
header('キャッシュ制御: max-age=86400,must-revalidate'); header('Last-Modified: ‘ .gmdate(’D, d M Y H:i:s’) . ‘ GMT’ ); header(”有効期限: ” .gmdate (’D, d M Y H:i:s’, time() + ‘86400’ ). ‘ GMT’);



Http の戻りステータスに応じて処理されます。 304を返す場合はキャッシュから直接読み込みます

etag.phpなど


コードは次のとおりですコードをコピーキャッシュ() echo date(”Y-m-d H:i:s”); 関数キャッシュ() コードをコピー
{

$etag = “http://longrujun.name”; If (isset($_SERVER['HTTP_IF_NONE_MATCH']) &&
$_SERVER['HTTP_IF_NONE_MATCH'] == $etag)
                                                                        header('Etag:'.$etag,true,304); 出る
}
else header('Etag:'.$etag); }




画像キャッシュの例


コードは次のとおりです

$eTag = $imagePath; $eTag .= ファイルMTime($imagePath); $eTag = md5($eTag); (ストリップスラッシュ($_SERVER['HTTP_IF_NONE_MATCH']) == $eTag)) { header("HTTP/1.1 304 未変更", TRUE, 304); 終了(); }http://www.bkjia.com/PHPjc/631550.html
$imagePath = "パス/画像へのパス"; if((isset($_SERVER['HTTP_IF_NONE_MATCH'])) &&
header("ETag: ".$eTag); header("Content-Type: image/png"); readFile($imagePath); exit();




上記の方法は非常に簡単です。以下の完全な例を参照してください

tru​​e
コードは次のとおりです コードをコピー

$fullpath = '/www/images/' .basename($_GET['img']); //ファイルはすべて /www/images/ の下にあると仮定します。 if (!is_file($fullpath)) {
header("HTTP/1.0 404 が見つかりません"); 終了(); }

$info = getImageSize($fullpath) //画像情報を取得します
if (!$info) { header("HTTP/1.0 404 が見つかりません"); 終了(); }

// 以下のヘッダー関数はすべてヘッダー情報を出力します。もっと。
header('Content-type: '. $info['mime']) //image/png と同様
header('Content-Length: '.filesize($fullpath)); //ファイルの長さ

header('Pragma: '); // 役に立たないが、サーバーがひどい単語を生成しないように設定する必要がある-キャッシュ

//有効期限を手動で設定します。単位は秒です
$validtime = 48* 60 * 60 // 48 時間
;
//キャッシュ相対リクエスト時間、
header('キャッシュ制御: ' . 'max-age='. $validtime);
// Expires ヘッダーも非常に重要で、その機能は max-age と似ています
//time()+$validtime: 期間を設定すると、有効期限が切れた後にリクエストがサーバーに送信されます
//gmdate、Sun, 01 Mar 2009 04:05:49 +0000 という文字列を生成します。これは GMT 標準タイムゾーンです
//preg_replace、Generate Sun、2009 年 3 月 1 日 04:05:49 GMT、注: これはサーバー設定に関連している可能性があります、
//ただし、デフォルト設定を使用します
header('Expires:'.preg_replace('/.{5}$/', 'GMT', gmdate('r', time()+ $validtime)));
//ファイルの最終変更時刻
$lasttime = filemtime($fullpath);
// 最終変更時刻が設定されているため、[更新] をクリックすると、ブラウザは画像を再度リクエストするときに 'IF_MODIFIED_SINCE' ヘッダーを送信します。 //PHP プログラムによって読み取られます
header('Last-Modified: ' .preg_replace('/.{5}$/', 'GMT', gmdate('r', $lasttime) ));
//重要、リクエスト内の時間とファイル生成のタイムスタンプが等しい場合、ファイルは変更されておらず、クライアントはそれをキャッシュできます
if (strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']) == $lasttime) {
header("HTTP/1.1 304 Not Modified"); // サーバーはファイルが変更されていないという命令を発行します
終了(); }

// ファイルが変更された場合は、データを再送信する必要があります
echo file_get_contents($fullpath);










http://www.bkjia.com/PHPjc/631550.html

www.bkjia.com
技術記事

php を使用してブラウザのキャッシュを開く場合でも、Apache または iis サーバー環境を使用して設定する場合でも、ブラウザの Cache-Control に基づいて動作します...

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
PHPおよびPython:さまざまなパラダイムが説明されていますPHPおよびPython:さまざまなパラダイムが説明されていますApr 18, 2025 am 12:26 AM

PHPは主に手順プログラミングですが、オブジェクト指向プログラミング(OOP)もサポートしています。 Pythonは、OOP、機能、手続き上のプログラミングなど、さまざまなパラダイムをサポートしています。 PHPはWeb開発に適しており、Pythonはデータ分析や機械学習などのさまざまなアプリケーションに適しています。

PHPとPython:彼らの歴史を深く掘り下げますPHPとPython:彼らの歴史を深く掘り下げますApr 18, 2025 am 12:25 AM

PHPは1994年に発信され、Rasmuslerdorfによって開発されました。もともとはウェブサイトの訪問者を追跡するために使用され、サーバー側のスクリプト言語に徐々に進化し、Web開発で広く使用されていました。 Pythonは、1980年代後半にGuidovan Rossumによって開発され、1991年に最初にリリースされました。コードの読みやすさとシンプルさを強調し、科学的コンピューティング、データ分析、その他の分野に適しています。

PHPとPythonの選択:ガイドPHPとPythonの選択:ガイドApr 18, 2025 am 12:24 AM

PHPはWeb開発と迅速なプロトタイピングに適しており、Pythonはデータサイエンスと機械学習に適しています。 1.PHPは、単純な構文と迅速な開発に適した動的なWeb開発に使用されます。 2。Pythonには簡潔な構文があり、複数のフィールドに適しており、強力なライブラリエコシステムがあります。

PHPとフレームワーク:言語の近代化PHPとフレームワーク:言語の近代化Apr 18, 2025 am 12:14 AM

PHPは、多数のWebサイトとアプリケーションをサポートし、フレームワークを通じて開発ニーズに適応するため、近代化プロセスで依然として重要です。 1.PHP7はパフォーマンスを向上させ、新機能を紹介します。 2。Laravel、Symfony、Codeigniterなどの最新のフレームワークは、開発を簡素化し、コードの品質を向上させます。 3.パフォーマンスの最適化とベストプラクティスは、アプリケーションの効率をさらに改善します。

PHPの影響:Web開発などPHPの影響:Web開発などApr 18, 2025 am 12:10 AM

phphassiblasifly-impactedwebdevevermentandsbeyondit.1)itpowersmajorplatformslikewordpratsandexcelsindatabase interactions.2)php'sadaptableability allowsitale forlargeapplicationsusingframeworkslikelavel.3)

スカラータイプ、リターンタイプ、ユニオンタイプ、ヌル可能なタイプなど、PHPタイプのヒントはどのように機能しますか?スカラータイプ、リターンタイプ、ユニオンタイプ、ヌル可能なタイプなど、PHPタイプのヒントはどのように機能しますか?Apr 17, 2025 am 12:25 AM

PHPタイプは、コードの品質と読みやすさを向上させるためのプロンプトがあります。 1)スカラータイプのヒント:php7.0であるため、基本データ型は、int、floatなどの関数パラメーターで指定できます。 3)ユニオンタイプのプロンプト:PHP8.0であるため、関数パラメーターまたは戻り値で複数のタイプを指定することができます。 4)Nullable Typeプロンプト:null値を含めることができ、null値を返す可能性のある機能を処理できます。

PHPは、オブジェクトのクローニング(クローンキーワード)と__Clone Magicメソッドをどのように処理しますか?PHPは、オブジェクトのクローニング(クローンキーワード)と__Clone Magicメソッドをどのように処理しますか?Apr 17, 2025 am 12:24 AM

PHPでは、クローンキーワードを使用してオブジェクトのコピーを作成し、\ _ \ _クローンマジックメソッドを使用してクローン動作をカスタマイズします。 1.クローンキーワードを使用して浅いコピーを作成し、オブジェクトのプロパティをクローン化しますが、オブジェクトのプロパティはクローニングしません。 2。\ _ \ _クローン法は、浅いコピーの問題を避けるために、ネストされたオブジェクトを深くコピーできます。 3.クローニングにおける円形の参照とパフォーマンスの問題を避けるために注意し、クローニング操作を最適化して効率を向上させます。

PHP対Python:ユースケースとアプリケーションPHP対Python:ユースケースとアプリケーションApr 17, 2025 am 12:23 AM

PHPはWeb開発およびコンテンツ管理システムに適しており、Pythonはデータサイエンス、機械学習、自動化スクリプトに適しています。 1.PHPは、高速でスケーラブルなWebサイトとアプリケーションの構築においてうまく機能し、WordPressなどのCMSで一般的に使用されます。 2。Pythonは、NumpyやTensorflowなどの豊富なライブラリを使用して、データサイエンスと機械学習の分野で驚くほどパフォーマンスを発揮しています。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター