인증 코드를 생성할 때 이미지를 직접 입력해야 합니다. 일반적으로 이를 위해 header("Content-type: image/jpeg")를 사용합니다. 많은 개발에서 우리는 헤더("Content-type: image/jpeg")를 사용하여 사진을 출력하려고 시도하고 일부 PHP의
이미지 처리 기술을 사용하여 출력 사진을 더욱 지능적이고 동적으로 만들려고 합니다. 그러나 다른 URL 구조를 지정하고 서버 기술을 사용하여 이미지를 캐시하지 않으면 이러한 출력 이미지가 많은 트래픽을 소비할 가능성이 매우 높습니다. 이를 캐시하고 다음에 사용자가 방문할 때 캐시를 호출하는 방법은 무엇입니까? (이 이미지를 변경하지 않고 유지한다는 것이 전제입니다.) // 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")));
상황 1: 브라우저가 이미 현재 페이지를 캐시한 경우 직접 사용하세요.
// 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; }
시나리오 2: 브라우저가 현재 페이지를 캐시하고 있습니다. 일부 이미지 정보를 업데이트했지만 원본 이미지 자체는 변경되지 않았으며 이전 캐시를 사용하고 싶기 때문에 캐시도 사용합니다.
$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; }
물론 우리가 고려해야 할 몇 가지 특별한 상황이 있지만, 위의 코드는 기본적으로 우리의 생각을 이끌어갈 수 있습니다. 그건 그렇고, 헤더("Content-type: image/jpeg") 위에 모두 넣어야 한다는 것을 기억하세요.
예제를 살펴보겠습니다<?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('Content-Type: image/jpeg'); imagejpeg($dst,null,100); imagedestroy($src); imagedestroy($dst); ?>
위 내용은 header()가 이미지 캐시를 출력하는 방법 사용 예의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!