我需要使用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框架。有哪些替代方案?
答案 0 :(得分:1)
您的主机是否允许您在apache之前安装像Perlbal(http://www.danga.com/perlbal/)这样的代理?
Perlbal允许您使用与x-sendfile非常相似的方法(使用X-REPROXY-URL:/path/to/a/local/file.jpg)卸载文件服务,并且它具有相当高的性能。 (LiveJournal和Flickr都使用(d)它。 但 要求您在不同的端口上运行apache,并在端口80上运行perlbal,这是您的托管服务提供商可能不喜欢的。当然,如果你不喜欢perlbal,你可以用像nginx这样的东西做同样的事情。
答案 1 :(得分:1)
您可以通过阅读request headers来模拟该内容,并使用fopen
,fseek
,fread
以4kb为步骤输出内容,依此类推。另请参阅可能的请求标头here。您还应该实现ETag
以让客户端识别文件未更改。