ホームページ >バックエンド開発 >PHPチュートリアル >PHP header() 出力画像キャッシュ_PHP チュートリアル

PHP header() 出力画像キャッシュ_PHP チュートリアル

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

PHP header() 出力画像キャッシュ

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

コードは次のとおりです// これを PHP 画像生成コードの上に置きます:
session_start();
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'] を送信します

シナリオ 2: ブラウザーは現在のページをキャッシュしましたが、一部の画像情報は更新されましたが、ソース画像自体は変更されておらず、以前のキャッシュを使用したいため、キャッシュも使用します。

if(isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])){
// ブラウザにこの画像のキャッシュされたバージョンがある場合は、304
を送信します header('Last-Modified: '.$_SERVER['HTTP_IF_MODIFIED_SINCE'],true,304);
終了します;
}
コードは次のとおりです

$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);
?>

www.bkjia.com本当http://www.bkjia.com/PHPjc/922889.html技術記事 PHP header() 出力画像キャッシュは多くの開発で使用されており、画像を出力するために header(Content-type: image/jpeg); を使用し、出力画像をより良くするためにいくつかの PHP 画像処理技術を使用しようとしています。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。