如何使用PHP以与图像直接链接相同的速度提供图像文件?

时间:2014-04-05 21:43:52

标签: php image sendfile

这是我需要实现的目标:

请求:http://www.example.com/image5.jpg

应该重写,例如:

RewriteRule ([^.]+)\.jpg$ /image.php?image=$1

现在,在我的image.php中,如果我知道它在哪里,我该如何为图像提供服务?

例如:

<?php

$path = '/images/5/2/3/1/small/latest/'.$_GET['image'].'.jpg';

?>

处理此请求的最佳方法是什么,以便它的行为类似于图像文件(发送图像标题)并显示图像?

网络上有各种替代方案,主要是X-Sendfilereadfile(),但我不确定最佳解决方案是什么以及原因。

2 个答案:

答案 0 :(得分:0)

假设网络服务器仍然可以通过完整路径直接提供图像,我只是直接重定向到图像:

header("Location: /images/5/2/3/1/small/latest/{$_GET['image']}.jpg");
exit;

发送标头后,exit很不错。此外,请确保您不发送任何其他输出,因为header将不起作用。

答案 1 :(得分:0)

执行此操作的最快方法是利用操作系统零拷贝支持,而通过告知网络驱动程序将数据直接从OS文件系统缓冲区移动到网络上来发送文件。这样,就不需要RAM处理,并且瓶颈将在您的网络带宽中。

我无法提及PHP支持这一点,但是,这意味着如果必须使用PHP提供文件,则必须将文件从OS文件缓存复制到PHP内存空间,并且然后请PHP让驱动程序复制它。

我认为这样做的内置方法将是最有效的方法:http://php.net/manual/en/function.http-send-file.php