【发布时间】:2011-11-03 12:32:09
【问题描述】:
我需要使用 PHP 和 resume-support 以编程方式启动文件下载
这些文件很重。所以像下面这样的 IO 缓冲或缓存不是一种选择
$content=file_get_contents($file);
header("Content-type: application/octet-stream");
header('Content-Disposition: attachment; filename="' . basename($file) . '"');
header("Content-Length: ". filesize($file));
echo $content;
到目前为止,我发现的唯一可行的选项是 Apache 模块 X-sendfile。不幸的是,我们的托管服务不会安装 mod_xsendfile - 所以我们正在寻找其他托管服务提供商,但那是另一回事了。
我们正在使用 LAMP 和 yii 框架。有哪些可能的替代方案?
【问题讨论】:
-
实际上,
x-sendfile就是为此而生的。如果您的提供商不提供此功能,它肯定不会提供任何(可用的?)替代方案,这些替代方案也必须与服务器集成。 -
Resumable downloads when using PHP to send the file? 的可能重复项 - 请注意,您可能希望
fread文件的一部分,echo给客户端,重复;而不是file_get_contents,这对于大文件可能会有问题。 -
@hakre:我在考虑仅使用 PHP 的解决方案,其中 URL 请求首先被 PHP 捕获,我在其中记录请求,检查文件是否存在,然后传递请求到阿帕奇
-
您是否考虑过使用支持某种 ACL 的 CDN?例如,见here
-
@Piskvor:其实我写了一个 HTTP 服务器,所以我知道这意味着很多。尝试使 10G 接口饱和,您会看到差异(复制 1 GByte 的数据/秒,如果是 PHP 之类的模块,则复制 2 个。您看到问题了吗?您的 RAM 不够快。另外,您将通过拥有相同数据的多个副本来杀死您的 CPU 缓存...无论如何,重复的问题解决了问题,所以它仍然比 nothing 好。