Heim  >  Artikel  >  Backend-Entwicklung  >  So gibt header() ein Beispiel für die Verwendung des Bildcaches aus

So gibt header() ein Beispiel für die Verwendung des Bildcaches aus

伊谢尔伦
伊谢尔伦Original
2017-06-24 13:29:382102Durchsuche

Wenn wir den Bestätigungscode generieren, müssen wir das Bild direkt eingeben, normalerweise mit header("Content-type: image/jpeg"); Dies ist eine kurze Einführung.

In vielen Entwicklungen versuchen wir, header("Content-type: image/jpeg"); zu verwenden, um Bilder auszugeben, und versuchen, einige PHP-Technologien zur Bildverarbeitung zu verwenden Ausgabe zulassen Bilder sind intelligenter und dynamischer. Wir stoßen jedoch häufig auf neue Probleme, sofern Sie keine anderen URL-Strukturen angeben und Servertechnologie zum Zwischenspeichern der Bilder verwenden. Es ist sehr wahrscheinlich, dass diese Ausgabebilder viel Datenverkehr verbrauchen. Wie kann ich sie zwischenspeichern und den Cache beim nächsten Besuch des Benutzers aufrufen? (Voraussetzung ist, dass dieses Bild unverändert bleiben soll)

// put this above any php image generation code:
session_start(); 
header("Cache-Control: private, max-age=10800, pre-check=10800");
header("Pragma: private");
header("Expires: " . date(DATE_RFC822,strtotime(" 2 day")));

Fügen Sie den obigen Code über dem Header("Content-type: image/jpeg"); hinzu, der die Cache-Zeit des aktuellen angibt Seite (zwei Tage) und verwenden Sie diesen Cache-Zeitknoten beim nächsten Besuch.
Stellen Sie als Nächstes fest, ob bereits ein Cache vorhanden ist. Wenn ja, verwenden Sie den Cache.

Szenario 1: Wenn der Browser die aktuelle Seite bereits zwischenspeichert, verwenden Sie sie direkt.

// the browser will send a $_SERVER['HTTP_IF_MODIFIED_SINCE'] if it has a cached copy 
if(isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])){
  // if the browser has a cached version of this image, send 304
  header('Last-Modified: '.$_SERVER['HTTP_IF_MODIFIED_SINCE'],true,304);
  exit;
}

Szenario 2: Der Browser speichert die aktuelle Seite im Cache. Obwohl wir einige Bildinformationen aktualisiert haben, hat sich das Quellbild selbst nicht geändert und wir möchten den vorherigen Cache verwenden, also verwenden wir auch den Cache .

$img = "some_image.png";
if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) && (strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']) == 
filemtime($img))) {
  // send the last mod time of the file back
  header('Last-Modified: '.gmdate('D, d M Y H:i:s', filemtime($img)).' GMT',true, 304);
  exit;
}

Natürlich gibt es einige besondere Situationen, die wir berücksichtigen müssen, aber der obige Code kann grundsätzlich unser Denken leiten. Denken Sie übrigens daran, sie alle über der Überschrift („Content-type: image/jpeg“) zu platzieren.
Schauen wir uns ein Beispiel an

<?php
//调整图片大小
/**
 *图片按比例调整大小的原理:
 *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 <= $max_width) && ($height <= $max_height))
{
    $tn_width = $width;
    $tn_height = $height;
}
elseif (($x_ratio * $height) < $max_height)
{
    $tn_height = ceil($x_ratio * $height);
    $tn_width = $max_width;
}
else
{
    $tn_width = ceil($y_ratio * $width);
    $tn_height = $max_height;
}
 
$src = imagecreatefromjpeg($image);
$dst = imagecreatetruecolor($tn_width, $tn_height); //新建一个真彩色图像
imagecopyresampled($dst, $src, 0, 0, 0, 0,$tn_width, $tn_height, $width, $height);        //重采样拷贝部分图像并调整大小
header(&#39;Content-Type: image/jpeg&#39;);
imagejpeg($dst,null,100);
imagedestroy($src);
imagedestroy($dst);
?>


Das obige ist der detaillierte Inhalt vonSo gibt header() ein Beispiel für die Verwendung des Bildcaches aus. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn