header()가 이미지 캐시를 출력하는 방법 사용 예

伊谢尔伦
풀어 주다: 2023-03-11 10:20:01
원래의
2035명이 탐색했습니다.

인증 코드를 생성할 때 이미지를 직접 입력해야 합니다. 일반적으로 이를 위해 header("Content-type: image/jpeg")를 사용합니다. 많은 개발에서 우리는 헤더("Content-type: image/jpeg")를 사용하여 사진을 출력하려고 시도하고 일부 PHP의

이미지 처리

기술을 사용하여 출력 사진을 더욱 지능적이고 동적으로 만들려고 합니다. 그러나 다른 URL 구조를 지정하고 서버 기술을 사용하여 이미지를 캐시하지 않으면 이러한 출력 이미지가 많은 트래픽을 소비할 가능성이 매우 높습니다. 이를 캐시하고 다음에 사용자가 방문할 때 캐시를 호출하는 방법은 무엇입니까? (이 이미지를 변경하지 않고 유지한다는 것이 전제입니다.)

header("Content-type: image/jpeg"); 위에 위의 코드를 추가하면 현재 페이지의 캐시 시간(2일)을 지정합니다. 다음 방문 시 이 캐시 시간 노드를 사용합니다.

다음으로 이미 캐시가 있는지 확인하세요. 그렇다면 캐시를 사용하세요.


상황 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(&#39;Content-Type: image/jpeg&#39;);
imagejpeg($dst,null,100);
imagedestroy($src);
imagedestroy($dst);
?>
로그인 후 복사

위 내용은 header()가 이미지 캐시를 출력하는 방법 사용 예의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!