복붙노트

PHP에서 이미지 출력하기

PHP

PHP에서 이미지 출력하기

이미지 $ 파일이 있습니다 (예 : ../image.jpg).

MIME 유형 $ 유형의

어떻게 브라우저로 출력 할 수 있습니까?

해결법

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

    1.

    $file = '../image.jpg';
    $type = 'image/jpeg';
    header('Content-Type:'.$type);
    header('Content-Length: ' . filesize($file));
    readfile($file);
    
  2. ==============================

    2.웹 서버를 직접 구성 할 수있는 자유가 있다면 mod_xsendfile (Apache 용)과 같은 도구는 PHP에서 파일을 읽고 인쇄하는 것보다 훨씬 낫습니다. PHP 코드는 다음과 같습니다.

    웹 서버를 직접 구성 할 수있는 자유가 있다면 mod_xsendfile (Apache 용)과 같은 도구는 PHP에서 파일을 읽고 인쇄하는 것보다 훨씬 낫습니다. PHP 코드는 다음과 같습니다.

    header("Content-type: $type");
    header("X-Sendfile: $file"); # make sure $file is the full path, not relative
    exit();
    

    mod_xsendfile은 X-Sendfile 헤더를 가져와 브라우저 자체에 파일을 보냅니다. 이것은 특히 큰 파일의 경우 성능면에서 큰 차이를 만들 수 있습니다. 제안 된 솔루션의 대부분은 전체 파일을 메모리로 읽어 들인 다음 인쇄합니다. 20kbyte의 이미지 파일은 괜찮습니다.하지만 200MB의 TIFF 파일을 가지고 있다면 문제가 생길 수 있습니다.

  3. ==============================

    3.

    $file = '../image.jpg';
    
    if (file_exists($file))
    {
        $size = getimagesize($file);
    
        $fp = fopen($file, 'rb');
    
        if ($size and $fp)
        {
            // Optional never cache
        //  header('Cache-Control: no-cache, no-store, max-age=0, must-revalidate');
        //  header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past
        //  header('Pragma: no-cache');
    
            // Optional cache if not changed
        //  header('Last-Modified: '.gmdate('D, d M Y H:i:s', filemtime($file)).' GMT');
    
            // Optional send not modified
        //  if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) and 
        //      filemtime($file) == strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']))
        //  {
        //      header('HTTP/1.1 304 Not Modified');
        //  }
    
            header('Content-Type: '.$size['mime']);
            header('Content-Length: '.filesize($file));
    
            fpassthru($fp);
    
            exit;
        }
    }
    

    http://php.net/manual/en/function.fpassthru.php

  4. ==============================

    4.

    header('Content-type: image/jpeg');
    readfile($image);
    
  5. ==============================

    5.이 시도:

    이 시도:

    <?php
      header("Content-type: image/jpeg");
      readfile("/path/to/image.jpg");
      exit(0);
    ?>
    
  6. ==============================

    6.

    <?php
    
    header("Content-Type: $type");
    readfile($file);
    

    그것은 짧은 버전입니다. 더 멋진 것들을 만들기 위해 할 수있는 몇 가지 작은 것들이 있지만, 그것은 당신을 위해 일할 것입니다.

  7. ==============================

    7.헤더를 사용하여 올바른 컨텐츠 유형을 보낼 수 있습니다.

    헤더를 사용하여 올바른 컨텐츠 유형을 보낼 수 있습니다.

    header('Content-Type: ' . $type);
    

    그리고 readfile 이미지의 내용을 출력 :

    readfile($file);
    

    그리고 어쩌면 (아마 필요하지는 않지만, 다만의 경우) Content-Length 헤더를 보내야 할 것입니다.

    header('Content-Length: ' . filesize($file));
    

    참고 : 이미지 데이터 (예 : 공백 없음) 이외의 다른 것을 출력하지 않도록하십시오. 그렇지 않으면 더 이상 유효한 이미지가 아닙니다.

  8. ==============================

    8.finfo (PHP 5.3+)를 사용하여 적절한 MIME 유형을 얻을 수 있습니다.

    finfo (PHP 5.3+)를 사용하여 적절한 MIME 유형을 얻을 수 있습니다.

    $filePath = 'YOUR_FILE.XYZ';
    $finfo = finfo_open(FILEINFO_MIME_TYPE);
    $contentType = finfo_file($finfo, $filePath);
    finfo_close($finfo);
    
    header('Content-Type: ' . $contentType);
    readfile($filePath);
    

    추신 : 당신은 Content-Length를 지정할 필요가 없습니다, 아파치가 당신을 위해 그것을 할 것입니다.

  9. ==============================

    9.

        $file = '../image.jpg';
        $type = 'image/jpeg';
        header('Content-Type:'.$type);
        header('Content-Length: ' . filesize($file));
        $img = file_get_contents($file);
        echo $img;
    

    이것은 나를 위해 일합니다! 코드 점화기에서 테스트했습니다. readfile을 사용하면 이미지가 표시되지 않습니다. 때로는 jpg 만 표시 할 수도 있고 때로는 큰 파일 만 표시 할 수도 있습니다. 그러나 "file_get_contents"로 변경 한 후, 나는 맛을 얻고 작동합니다 !! 이것이 스크린 샷입니다. 데이터베이스의 "보안 이미지"의 스크린 샷

  10. from https://stackoverflow.com/questions/1851849/output-an-image-in-php by cc-by-sa and MIT license