ホームページ  >  記事  >  バックエンド開発  >  PHPヘッダ関数が画像キャッシュ実装コードを出力

PHPヘッダ関数が画像キャッシュ実装コードを出力

WBOY
WBOYオリジナル
2016-07-25 08:52:17991ブラウズ
  1. // これを php 画像生成コードの上に置きます:
  2. session_start();
  3. header("Cache-Control: private, max-age=10800, pre-check=10800");
  4. header("Pragma : private");
  5. header("Expires: " . date(DATE_RFC822,strtotime(" 2 day")));
コードをコピー

header("Content-type: image/jpeg") に追加; このコードは、現在のページのキャッシュ時間 (2 日) を指定し、次回のアクセス時にこのキャッシュ時間ノードを使用します。 次に、キャッシュが既に存在するかどうかを確認し、存在する場合はそのキャッシュを使用します。

状況 1: ブラウザーが現在のページを既にキャッシュしている場合は、それを直接使用します。

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

ケース 2: ブラウザーはキャッシュされていますが、現在のページの画像情報は更新されていますが、ソース画像自体は変更されていません。以前のキャッシュを使用したい場合は、キャッシュも使用する必要があります。

  1. $img = "some_image.png";
  2. if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) && (strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']) == filemtime($img))) {
  3. // ファイルの最終更新時刻を送り返します
  4. header('Last-Modified: '.gmdate('D, d M Y H:i:s', filemtime($img)).' GMT',true, 304) ;
  5. exit;
  6. }
コードをコピー

もちろん、考慮しなければならない特別な状況がいくつかあります。それらをすべて header("Content-type: image/jpeg") の上に置くことを忘れないでください。

例:

  1. //画像のサイズを変更
  2. /**
  3. *画像の比例リサイズの原則:
  4. *1. 元の画像のサイズがターゲットサイズ以下であるかどうかを比較し、その場合は、元の画像の幅と高さを直接使用します。元の画像のサイズがターゲット サイズを超えている場合は、元の画像の高さのサイズ
  5. *3 を比較します。例: 幅 > 高さの場合、幅 = ターゲットの幅、高さ = ターゲットの幅 * 元の高さの比率
  6. *4。例: 高さ > 幅、高さ = ターゲットの高さ、幅 = ターゲットの高さ スケール* 元の幅
  7. **/ bbs.it-home.org
  8. $image = "test.jpg";
  9. $max_width = 200;
  10. $ max_height = 200;
  11. $size = getimagesize($image); //画像のサイズを取得します
  12. $width = $size[0];
  13. $x_ratio = $max_width / $width;
  14. $y_ratio = $max_height / $height;
  15. if (($width <= $max_width) && ($height <= $max_height))
  16. {
  17. $tn_width = $width;
  18. $tn_height = $height;
  19. }
  20. elseif (($x_ratio * $height) < $max_height)
  21. {
  22. $tn_height = ceil($x_ratio * $height);
  23. $tn_width = $max_width;
  24. }
  25. else
  26. {
  27. $ tn_width = ceil($y_ratio * $width);
  28. $tn_height = $max_height;
  29. }
  30. $src = imagecreatefromjpeg($image);
  31. $dst = imagecreatetruecolor($tn_width, $tn_height); //新規作成true color 画像
  32. imagecopyresampled($dst, $src, 0, 0, 0, 0,$tn_width, $tn_height, $width, $height); // 画像の一部をリサンプルしてコピーし、サイズを変更します
  33. header('Content-タイプ: image /jpeg');
  34. imagejpeg($dst,null,100);
  35. imagedestroy($src);
  36. imagedestroy($dst);
  37. ?>
コードをコピー
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。