PHP 페이지를 이미지로 반환
PHPPHP 페이지를 이미지로 반환
이미지 파일 (정확하게 .jpeg)을 읽으려고하는데, 페이지 출력으로 되돌려 보내지 만 이미지를 표시합니다 ...
내 index.php에는 다음과 같은 이미지 링크가 있습니다.
<img src='test.php?image=1234.jpeg' />
내 PHP 스크립트는 기본적 으로이 않습니다 :
1) 1234.jpeg 읽기 2) 에코 파일 내용 ... 3) 출력을 mime-type으로 되 돌리는 느낌이 들지만, 이것은 내가 잃어버린 부분이다.
일단 이것을 알아 내면 파일 이름 입력을 모두 제거하고 이미지 ID로 바꿉니다.
내가 명확하지 않거나 더 많은 정보가 필요하면 답장을 보내주십시오.
해결법
-
==============================
1.PHP Manual에는 다음 예제가 있습니다 :
PHP Manual에는 다음 예제가 있습니다 :
<?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) 또는 이와 유사한 것으로 저장하십시오.
-
==============================
2.readfile ()은이 작업을 수행하는 데 일반적으로 사용되며 fpassthru ()를 사용하는 것보다 더 나은 솔루션 인 것으로 보입니다.
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"); }
-
==============================
3.이것은 효과가있다. 느려질 수 있습니다.
이것은 효과가있다. 느려질 수 있습니다.
$img = imagecreatefromjpeg($filename); header("Content-Type: image/jpg"); imagejpeg($img); imagedestroy($img);
-
==============================
4.나는 Content-Length없이 일했다. 아마 원격 이미지 파일을위한 이유 작업
나는 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;
-
==============================
5.당신이 데이터베이스에서 읽지 않는다면 또 다른 쉬운 옵션 (더 좋은 것은 아니고 단지 다른 것)은 단지 당신을 위해 모든 코드를 출력하는 함수를 사용하는 것입니다. 참고 : PHP가 이미지 크기를 읽고 클라이언트에 제공하여 렌더링 속도를 높이려면이 방법으로도 쉽게 할 수 있습니다.
당신이 데이터베이스에서 읽지 않는다면 또 다른 쉬운 옵션 (더 좋은 것은 아니고 단지 다른 것)은 단지 당신을 위해 모든 코드를 출력하는 함수를 사용하는 것입니다. 참고 : PHP가 이미지 크기를 읽고 클라이언트에 제공하여 렌더링 속도를 높이려면이 방법으로도 쉽게 할 수 있습니다.
<?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>
from https://stackoverflow.com/questions/900207/return-a-php-page-as-an-image by cc-by-sa and MIT license
'PHP' 카테고리의 다른 글
PHP : 배열 값을 즉시 접근 (0) | 2018.09.18 |
---|---|
HTML / PHP - 양식 - 배열로 입력 (0) | 2018.09.18 |
PHP 치명적인 오류 : 클래스를 다시 선언 할 수 없습니다. (0) | 2018.09.18 |
범위 내에서 고유 한 난수 생성 - PHP (0) | 2018.09.18 |
PHP를 사용하여 MySQL 데이터베이스에 배열 삽입 (0) | 2018.09.18 |