用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; } }
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”之后,我得到了这个味道,并且工作了! 这是屏幕截图: 从数据库中的“安全形象”的屏幕截图