이 기사의 예에서는 PHP가 header()를 사용하여 이미지 캐시를 출력하는 방법을 설명합니다. 참고할 수 있도록 모든 사람과 공유하세요. 구체적인 분석은 다음과 같습니다.
인증 코드를 생성할 때 이미지를 직접 입력해야 합니다. 일반적으로 이를 달성하기 위해 header("Content-type: image/jpeg")를 사용합니다.
많은 개발에서 우리는 header("Content-type: image/jpeg");를 사용하여 이미지를 출력하려고 노력하고 있으며 일부 PHP 이미지 처리 기술을 사용하여 출력 이미지를 더욱 지능적이고 동적으로 만들려고 노력하고 있습니다. 그러나 다른 URL 구조를 지정하고 서버 기술을 사용하여 이미지를 캐시하지 않으면 이러한 출력 이미지가 많은 트래픽을 소비할 가능성이 매우 높습니다. 이를 캐시하고 다음에 사용자가 방문할 때 캐시를 호출하는 방법은 무엇입니까? (이 이미지를 변경하지 않고 유지하려는 경우)
// PHP 이미지 생성 코드 위에 이를 입력하세요.
세션_시작()
header("Cache-Control: private, max-age=10800, pre-check=10800");
header("Pragma: private");
header("만료일: " . date(DATE_RFC822,strtotime(" 2일")));
header("Content-type: image/jpeg"); 위에 위 코드를 추가하면 현재 페이지의 캐시 시간(2일)을 지정하고 다음 방문 시 이 캐시 시간 노드를 사용합니다.
다음으로, 이미 캐시가 있는지 확인하세요. 그렇다면 캐시를 사용하세요.
시나리오 1: 브라우저가 이미 현재 페이지를 캐시한 경우 이를 직접 사용합니다.
// 브라우저는 $_SERVER['HTTP_IF_MODIFIED_SINCE']를 보냅니다. 캐시된 사본이 있습니다
if(isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])){
// 브라우저에 이 이미지의 캐시된 버전이 있는 경우 304를 보냅니다.
header('마지막 수정: '.$_SERVER['HTTP_IF_MODIFIED_SINCE'],true,304);
나가세요;
}
시나리오 2: 브라우저가 현재 페이지를 캐시했습니다. 일부 이미지 정보를 업데이트했지만 원본 이미지 자체는 변경되지 않았으며 이전 캐시를 사용하려고 하므로 캐시도 사용합니다.
$img = "some_image.png";
if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) && (strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']) == filemtime($img))) {
// 파일의 마지막 수정 시간을 다시 보냅니다
header('최종 수정: '.gmdate('D, d M Y H:i:s', filemtime($img)).' GMT',true, 304);
나가세요;
}
물론 우리가 고려해야 할 몇 가지 특별한 상황이 있지만 위의 코드는 기본적으로 우리의 생각을 이끌어 낼 수 있습니다. 그건 그렇고, 헤더("Content-type: image/jpeg") 위에 모두 넣어야 한다는 것을 기억하세요.
예시를 살펴보겠습니다
//调整图文大小
/**
*이미지 크기를 비례적으로 조정하는 원리:
*1. 원본 이미지 크기가 대상 크기보다 작거나 같은지 비교하세요. 그렇다면 원본 이미지의 너비와 높이를 직접 사용하세요
*2. 원본 이미지 크기가 목표 크기를 초과하는 경우 원본 이미지의 너비와 높이를 비교하세요
*3. 예: 너비 > 높이, 너비 = 대상 너비, 높이 = 대상 너비 비율 * 원래 높이
*4. 예: 높이 > 너비, 높이 = 대상 높이, 너비 = 대상 높이 비율 * 원래 너비
**/
$image = "test.jpg";
$max_width = 200;
$max_height = 200;
$size = getimagesize($image); //得到图像적대소
$너비 = $size[0];
$높이 = $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;
}
그 외
{
$tn_width = ceil($y_ratio * $width);
$tn_height = $max_height;
}
$src = imagecreatefromjpeg($image);
$dst = imagecreatetruecolor($tn_width, $tn_height); //새로운 建一个真彩color图이미지
imagecopyresampled($dst, $src, 0, 0, 0, 0,$tn_width, $tn_height, $width, $height); //중요한 이미지
header('콘텐츠 유형: image/jpeg');
imagejpeg($dst,null,100);
이미지 파괴($src);
imagedestroy($dst);
?>
希望本文所述对大家的PHP程序设计有所帮助。