0

这是我需要实现的:

要求: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(),但我不确定最佳解决方案是什么以及为什么。

4

2 回答 2

0

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

但是,我找不到任何关于 PHP 支持这一点的提及,这意味着如果您必须使用 PHP 提供文件,则必须将文件从 OS 文件缓存复制到 PHP 的内存空间中,然后让 PHP 询问驱动复制它。

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

于 2014-04-05T21:51:13.020 回答
0

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

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

exit发送标头后很好。另外,请确保您不发送任何其他输出,header否则将无法正常工作。

于 2014-04-05T21:48:19.723 回答