Maison > développement back-end > tutoriel php > Comment header() génère un exemple d'utilisation du cache d'images

Comment header() génère un exemple d'utilisation du cache d'images

伊谢尔伦
Libérer: 2023-03-11 10:20:01
original
2156 Les gens l'ont consulté

Lorsque nous générons le code de vérification, nous devons saisir directement l'image, généralement en utilisant header("Content-type: image/jpeg"); ceci. Voici une brève introduction.

Dans de nombreux développements, nous essayons d'utiliser header("Content-type: image/jpeg"); pour générer des images, et essayons d'utiliser la technologie de traitement d'image de PHP pour autoriser la sortie Les images sont plus intelligentes et dynamiques. Mais nous rencontrons souvent de nouveaux problèmes, à moins que vous ne spécifiiez des structures d'URL différentes et que vous n'utilisiez une technologie de serveur pour mettre les images en cache, il est très probable que ces images de sortie consomment beaucoup de trafic. Comment les mettre en cache et appeler le cache lors de la prochaine visite de l'utilisateur ? (Le principe est que vous souhaitez que cette image reste inchangée)

// 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")));
Copier après la connexion

Ajoutez le code ci-dessus au-dessus de l'en-tête("Content-type: image/jpeg");, qui spécifiera le temps de cache du fichier actuel. page (deux jours) et utilisez ce nœud de temps de cache lors de la prochaine visite.
Ensuite, déterminez s'il existe déjà un cache. Si c'est le cas, utilisez le cache.

Scénario 1 : Si le navigateur met déjà en cache la page actuelle, utilisez-la directement.

// 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;
}
Copier après la connexion

Scénario 2 : Le navigateur met en cache la page actuelle. Bien que nous ayons mis à jour certaines informations sur l'image, l'image source elle-même n'a pas changé et nous souhaitons utiliser le cache précédent, nous utilisons donc également le 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;
}
Copier après la connexion

Bien sûr, il existe certaines situations particulières que nous devons considérer, mais le code ci-dessus peut fondamentalement guider notre réflexion. Au fait, n'oubliez pas de tous les mettre au-dessus de header("Content-type: image/jpeg").
Regardons un exemple

<?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);
?>
Copier après la connexion


Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal