PHP 페이지를 이미지로 반환
이미지 파일 (정확히 .jpeg)을 읽고 페이지 출력으로 다시 '반향'하려고하는데 이미지가 표시됩니다.
내 index.php에는 다음과 같은 이미지 링크가 있습니다.
<img src='test.php?image=1234.jpeg' />
내 PHP 스크립트는 기본적으로 다음을 수행합니다.
1) 1234.jpeg 읽기 2) 에코 파일 내용 ... 3) 출력을 MIME 형식으로 되돌려 야 할 것 같은 느낌이 들지만, 여기서 길을 잃었습니다.
이것을 알아 내면 파일 이름 입력을 모두 제거하고 이미지 ID로 바꿉니다.
확실하지 않거나 더 많은 정보가 필요하면 회신 해주십시오.
PHP 매뉴얼에는 다음과 같은 예가 있습니다 .
<?php
// open the file in a binary mode
$name = './img/ok.png';
$fp = fopen($name, 'rb');
// send the right headers
header("Content-Type: image/png");
header("Content-Length: " . filesize($name));
// dump the picture and stop the script
fpassthru($fp);
exit;
?>
중요한 점은 Content-Type 헤더를 보내야한다는 것입니다. 또한 <?php ... ?>
태그 앞뒤에 파일에 추가 공백 (예 : 줄 바꿈)을 포함하지 않도록주의해야 합니다.
주석에서 제안했듯이 ?>
태그 를 생략하여 스크립트 끝에 추가 공백이 생기는 위험을 피할 수 있습니다 .
<?php
$name = './img/ok.png';
$fp = fopen($name, 'rb');
header("Content-Type: image/png");
header("Content-Length: " . filesize($name));
fpassthru($fp);
여전히 스크립트 상단의 공백을 조심스럽게 피해야합니다. 특히 까다로운 공백 형식 중 하나는 UTF-8 BOM 입니다. 이를 방지하려면 스크립트를 "ANSI"(메모장) 또는 "ASCII"또는 "서명없는 UTF-8"(Emacs) 등으로 저장해야합니다.
readfile()
이 작업을 수행하는데도 일반적으로 사용되며을 사용하는 것보다 더 나은 솔루션 인 것 같습니다 fpassthru()
.
그것은 나를 위해 잘 작동 하며 문서 에 따르면 메모리 문제를 나타내지 않습니다.
여기에 나의 예가 있습니다.
$file_out = "myDirectory/myImage.gif"; // The image to return
if (file_exists($file_out)) {
//Set the content-type header as appropriate
$image_info = getimagesize($file_out);
switch ($image_info[2]) {
case IMAGETYPE_JPEG:
header("Content-Type: image/jpeg");
break;
case IMAGETYPE_GIF:
header("Content-Type: image/gif");
break;
case IMAGETYPE_PNG:
header("Content-Type: image/png");
break;
default:
header($_SERVER["SERVER_PROTOCOL"] . " 500 Internal Server Error");
break;
}
// Set the content-length header
header('Content-Length: ' . filesize($file_out));
// Write the image bytes to the client
readfile($file_out);
}
else { // Image file not found
header($_SERVER["SERVER_PROTOCOL"] . " 404 Not Found");
}
작동합니다. 느릴 수 있습니다.
$img = imagecreatefromjpeg($filename);
header("Content-Type: image/jpg");
imagejpeg($img);
imagedestroy($img);
Content-Length없이 작업했습니다. 원격 이미지 파일에 대해 작동하는 이유
// open the file in a binary mode
$name = 'https://www.example.com/image_file.jpg';
$fp = fopen($name, 'rb');
// send the right headers
header('Cache-Control: no-cache, no-store, max-age=0, must-revalidate');
header('Expires: January 01, 2013'); // Date in the past
header('Pragma: no-cache');
header("Content-Type: image/jpg");
/* header("Content-Length: " . filesize($name)); */
// dump the picture and stop the script
fpassthru($fp);
exit;
Another easy Option (not any better, just different) if you aren't reading from a database is to just use a function to output all the code for you... Note: If you also wanted php to read the image dimensions and give that to the client for faster rendering, you could easily do that too with this method.
<?php
Function insertImage( $fileName ) {
echo '<img src="path/to/your/images/',$fileName,'">';
}
?>
<html>
<body>
This is my awesome website.<br>
<?php insertImage( '1234.jpg' ); ?><br>
Like my nice picture above?
</body>
</html>
참고URL : https://stackoverflow.com/questions/900207/return-a-php-page-as-an-image
'Programing' 카테고리의 다른 글
“git checkout-”. (0) | 2020.12.04 |
---|---|
Java에서 tar 파일을 어떻게 추출합니까? (0) | 2020.12.04 |
명령 줄에서 Android 애플리케이션을 시작하는 방법은 무엇입니까? (0) | 2020.12.04 |
argparse를 사용하는 Python의 선택적 stdin (0) | 2020.12.04 |
Javascript를 사용하여 다중 선택 상자에서 Ctrl- 클릭의 필요성을 피하는 방법은 무엇입니까? (0) | 2020.12.04 |