用PHP输出图像

我有一个图像$file (如../image.jpg

其中有一个MIMEtypes$type

我怎样才能输出到浏览器?

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

如果你可以自由的configuration你的web服务器,像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标题并将文件发送到浏览器本身。 这可以使性能发生真正的变化,特别是对于大文件。 大多数提议的解决scheme将整个文件读入内存,然后打印出来。 对于一个20kbyte的图像文件,这是可以的,但是如果你有一个200MB的TIFF文件,你肯定会遇到问题。

 $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 MYH: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

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

尝试这个:

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

这是简短的版本。 还有一些额外的小东西可以使事情变得更好,但是这对你有用。

您可以使用标题发送正确的Content-type:

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

readfile输出图像的内容:

 readfile($file); 

也许(可能不是必要的,但是,以防万一)你也必须发送Content-Length头:

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

注意:确保你不输出任何东西比你的图像数据(例如没有空白) ,否则将不再是一个有效的图像。

你可以使用finfo (PHP 5.3+)来获得正确的MIMEtypes。

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

PS :你不必指定Content-Length ,Apache会为你做。

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

这对我有用! 我已经在代码点火器上testing了它。 如果我使用readfile,图像将不会显示。 有时只显示JPG,有时只是大文件。 但是当我把它改成“file_get_contents”之后,我得到了这个味道,并且工作了! 这是屏幕截图: 从数据库中的“安全形象”的屏幕截图