Emr*_*ici 130
$file = '../image.jpg';
$type = 'image/jpeg';
header('Content-Type:'.$type);
header('Content-Length: ' . filesize($file));
readfile($file);
Run Code Online (Sandbox Code Playgroud)
Ben*_*end 30
如果您可以自己配置Web服务器,那么mod_xsendfile(适用于Apache)等工具比使用PHP读取和打印文件要好得多.您的PHP代码如下所示:
header("Content-type: $type");
header("X-Sendfile: $file"); # make sure $file is the full path, not relative
exit();
Run Code Online (Sandbox Code Playgroud)
mod_xsendfile获取X-Sendfile头并将文件发送到浏览器本身.这可以在性能上产生真正的差异,尤其是对于大文件.大多数建议的解决方案将整个文件读入内存然后将其打印出来.这对于一个20k字节的图像文件来说没问题,但如果你有一个200 MB的TIFF文件,你肯定会遇到问题.
Mik*_*ike 22
$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;
}
}
Run Code Online (Sandbox Code Playgroud)
http://php.net/manual/en/function.fpassthru.php
| 归档时间: |
|
| 查看次数: |
122727 次 |
| 最近记录: |