ホームページ  >  記事  >  バックエンド開発  >  PHP は header() を使用して画像キャッシュの例を出力します。_PHP チュートリアル

PHP は header() を使用して画像キャッシュの例を出力します。_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 10:12:09918ブラウズ

PHP は header() を使用して画像キャッシュの例を出力します。

この記事の例では、PHP が header() を使用して画像キャッシュを出力する方法を説明します。参考のためにみんなで共有してください。具体的な分析は次のとおりです:

検証コードを生成する場合、通常は header("Content-type: image/jpeg") を使用してこれを実現します。

多くの開発では、header("Content-type: image/jpeg"); を使用して画像を出力し、出力画像をよりインテリジェントかつダイナミックにするために PHP 画像処理テクノロジを使用しようとします。しかし、別の URL 構造を指定し、サーバー テクノロジを使用して画像をキャッシュしない限り、これらの出力画像が大量のトラフィックを消費する可能性が高くなります。それらをキャッシュし、ユーザーが次回アクセスしたときにキャッシュを呼び出すにはどうすればよいでしょうか? (この写真を変更しないでおきたい場合)

コードをコピー コードは次のとおりです:
// これを任意の php 画像生成コードの上に置きます:
セッション開始(); header("キャッシュ制御: プライベート、max-age=10800、pre-check=10800");
header("プラグマ: プライベート");
header("有効期限: " . date(DATE_RFC822,strtotime(" 2 日")));
header("Content-type: image/jpeg"); の上に上記のコードを追加します。これにより、現在のページのキャッシュ時間 (2 日) が指定され、次回のアクセス時にこのキャッシュ時間ノードが使用されます。
次に、キャッシュが既に存在するかどうかを確認し、存在する場合はそのキャッシュを使用します。
状況 1: ブラウザーが現在のページを既にキャッシュしている場合は、それを直接使用します。


コードをコピーします コードは次のとおりです:
// キャッシュされたコピーがある場合、ブラウザは $_SERVER['HTTP_IF_MODIFIED_SINCE'] を送信します
if(isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])){
// ブラウザにこの画像のキャッシュされたバージョンがある場合は、304
を送信します header('Last-Modified: '.$_SERVER['HTTP_IF_MODIFIED_SINCE'],true,304);
終了します;
}
シナリオ 2: ブラウザーは現在のページをキャッシュしましたが、一部の画像情報は更新されましたが、ソース画像自体は変更されていないため、以前のキャッシュを使用したいため、キャッシュも使用します。

コードをコピーします コードは次のとおりです:
$img = "some_image.png";
if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) && (strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']) == filemtime($img))) {
// ファイルの最終更新時刻を送り返します
header('Last-Modified: '.gmdate('D, d M Y H:i:s', filemtime($img)).' GMT',true, 304);
終了します;
}
もちろん、考慮しなければならない特別な状況がいくつかありますが、上記のコードは基本的に私たちの考え方を導くことができます。ちなみに、すべてヘッダー("Content-type: image/jpeg") より上に置くことを忘れないでください。
例を見てみましょう

コードをコピーします コードは次のとおりです:
//画像サイズを調整します
/**
*画像のサイズを比例的に変更する原則:
*1. 元の画像サイズがターゲットサイズ以下であるかどうかを比較し、その場合は元の画像の幅と高さをそのまま使用します
※2.元画像のサイズが目標サイズを超える場合は、元画像の幅と高さを比較してください
*3. 例: 幅 > 高さの場合、幅 = ターゲット幅、高さ = ターゲット幅 * 元の高さの比率
*4. 例: 高さ > 幅の場合、高さ = 目標の高さ、幅 = 目標の高さの比率 * 元の幅
**/

$image = "test.jpg";
$max_width = 200;
$max_height = 200;

$size = getimagesize($image) //画像のサイズを取得します
; $width = $size[0]; $height = $size[1];

$x_ratio = $max_width / $width;
$y_ratio = $max_height / $height;

if (($width {
$tn_width = $width;
$tn_height = $height;
}
elseif (($x_ratio * $height) {
$tn_height = ceil($x_ratio * $height);
$tn_width = $max_width;
}
それ以外
{
$tn_width = ceil($y_ratio * $width);
$tn_height = $max_height;
}

$src = imagecreatefromjpeg($image);
$dst = imagecreatetruecolor($tn_width, $tn_height) // 新しい True Color イメージを作成します
imagecopyresampled($dst, $src, 0, 0, 0, 0,$tn_width, $tn_height, $width, $height); // 画像のコピー部分をリサンプルしてサイズ変更します
header('Content-Type: image/jpeg');
imagejpeg($dst,null,100);
imagedestroy($src);
imagedestroy($dst);
?>

この記事で説明した内容が皆様の PHP プログラミング設計に役立つことを願っています。

www.bkjia.com本当http://www.bkjia.com/PHPjc/924536.html技術記事 PHP が header() を使用して画像キャッシュを出力する例 この記事では、PHP が header() を使用して画像キャッシュを出力する方法について説明します。参考のためにみんなで共有してください。具体的な分析は次のとおりです: 生成すると...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
前の記事:PHP ネイティブ関数は必ずしも優れているのでしょうか? , PHPネイティブ関数_PHPチュートリアル次の記事:PHP ネイティブ関数は必ずしも優れているのでしょうか? , PHPネイティブ関数_PHPチュートリアル

関連記事

続きを見る