복붙노트

PHP 페이지를 이미지로 반환

PHP

PHP 페이지를 이미지로 반환

이미지 파일 (정확하게 .jpeg)을 읽으려고하는데, 페이지 출력으로 되돌려 보내지 만 이미지를 표시합니다 ...

내 index.php에는 다음과 같은 이미지 링크가 있습니다.

<img src='test.php?image=1234.jpeg' />

내 PHP 스크립트는 기본적 으로이 않습니다 :

1) 1234.jpeg 읽기 2) 에코 파일 내용 ... 3) 출력을 mime-type으로 되 돌리는 느낌이 들지만, 이것은 내가 잃어버린 부분이다.

일단 이것을 알아 내면 파일 이름 입력을 모두 제거하고 이미지 ID로 바꿉니다.

내가 명확하지 않거나 더 많은 정보가 필요하면 답장을 보내주십시오.

해결법

  1. ==============================

    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
    $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. ==============================

    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. ==============================

    3.이것은 효과가있다. 느려질 수 있습니다.

    이것은 효과가있다. 느려질 수 있습니다.

    $img = imagecreatefromjpeg($filename);
    header("Content-Type: image/jpg");
    imagejpeg($img);
    imagedestroy($img);
    
  4. ==============================

    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. ==============================

    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>
    
  6. from https://stackoverflow.com/questions/900207/return-a-php-page-as-an-image by cc-by-sa and MIT license