PHP uses header() to output image cache examples, _PHP tutorial

WBOY
Release: 2016-07-13 10:12:09
Original
865 people have browsed it

PHP uses header() to output an image cache instance,

The example in this article describes how PHP uses header() to output image cache. Share it with everyone for your reference. The specific analysis is as follows:

When we generate the verification code, we need to directly input the image. Usually we use header("Content-type: image/jpeg"); to achieve this. Here is a brief introduction.

In many developments, we try to use header("Content-type: image/jpeg"); to output images, and try to use some PHP image processing technology to make the output images 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? (provided you want this image to remain unchanged)

Copy code 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 on 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.

Copy code 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;
}

Situation 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.
Copy code 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;
}

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
Copy code The code is as follows:
//Adjust image size
/**
*Principle of proportionally resizing 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); //Get the size of the 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 resize
header('Content-Type: image/jpeg');
imagejpeg($dst,null,100);
imagedestroy($src);
imagedestroy($dst);
?>

I hope this article will be helpful to everyone’s PHP programming design.

www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/924536.htmlTechArticlePHP uses header() to output image cache examples. This example describes how PHP uses header() to output image cache. . Share it with everyone for your reference. The specific analysis is as follows: When we generate...
Related labels:
source:php.cn
Statement of this Website
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
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!