PHP header() output image cache
In many developments, we try to use header("Content-type: image/jpeg"); to output images, trying to use some PHP Advanced image processing technology makes the output pictures more intelligent and dynamic. But we often encounter new problems. Unless you specify different URL structures and use server technology to cache the images, it is very likely that these output images will consume a lot of traffic. How to cache them and call the cache the next time the user visits? (The premise is that you want this image to remain unchanged)
The code is as follows |
|
// 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"))); |
Add the above code above header("Content-type: image/jpeg");, which will specify the cache time of the current page (two days) and use this cache time node in the next visit.
Next, determine whether there is already a cache. If so, use the cache.
Scenario 1: If the browser already caches the current page, then use it directly.
The code is as follows |
|
// 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;
} |
Scenario 2: The browser has cached the current page. Although we have updated some image information, the source image itself has not changed, and we want to use the previous cache, so we also use the cache.
The code is as follows |
|
$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;
}
代码如下 |
|
$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;
}
|
|
Of course, there are some special situations that we must consider, but the above code can basically lead our thinking. By the way, remember to put them all above header("Content-type: image/jpeg").
Let’s take a look at an example
The code is as follows |
|
//调整图片大小
/**
*The principle of proportional resizing of images:
*1. Compare whether the original image size is less than or equal to the target size. If so, directly use the original image width and height
*2. If the original image size exceeds the target size, compare the width and height of the original image
*3. For example: width > height, then width = target width, height = ratio of target width * original height
*4. For example: height > width, then height = target height, width = ratio of target height * Original width
**/
$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); //Create a new true color image
imagecopyresampled($dst, $src, 0, 0, 0, 0,
$tn_width, $tn_height, $width, $height); //Resample copy part of the image and adjust the size
header('Content-Type: image/jpeg');
imagejpeg($dst,null,100);
imagedestroy($src);
imagedestroy($dst);
?>
|
http://www.bkjia.com/PHPjc/922889.htmlwww.bkjia.comtruehttp: //www.bkjia.com/PHPjc/922889.htmlTechArticlePHP header() output image cache in many developments, we try to use header(Content-type: image/jpeg) ;To output pictures, try to use some PHP image processing technology to make the output pictures more...
Statement:The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn