Php 从远程服务器下载大型文件

Php 从远程服务器下载大型文件,php,stream,download,readfile,Php,Stream,Download,Readfile,我们的文件托管在RapidShare上,我们希望通过自己的网站提供服务。基本上,当用户请求http://site.com/download.php?file=whatever.txt,脚本应将文件从RapidShare流式传输给用户 唯一让我头疼的是如何正确地流媒体。我想使用cURL,但我不确定是否可以从RapidShare中分块读取下载内容,然后将其回传给用户。到目前为止,我想到的最好的方法是使用fopen、fread的组合,将文件块回显给用户,刷新并重复该过程,直到整个文件被传输 我也知道P

我们的文件托管在RapidShare上,我们希望通过自己的网站提供服务。基本上,当用户请求
http://site.com/download.php?file=whatever.txt
,脚本应将文件从RapidShare流式传输给用户

唯一让我头疼的是如何正确地流媒体。我想使用cURL,但我不确定是否可以从RapidShare中分块读取下载内容,然后将其回传给用户。到目前为止,我想到的最好的方法是使用fopen、fread的组合,将文件块回显给用户,刷新并重复该过程,直到整个文件被传输

我也知道PHP
readfile()
函数,但这是最好的选择吗?请记住,这些文件的大小可能有几GB,尽管我们有16GB RAM的服务器,但我希望尽可能降低内存使用率

谢谢您的建议。

HTTP有一个名为“Range”的头,它基本上允许您获取文件的任何块(知道您已经知道文件大小),但是由于PHP不支持多线程,因此我看不到使用它的任何好处

好吧,如果你不想消耗你所有的内存,唯一的办法就是两步走

首先,使用
fopen()

这样,即使是一个文件2To,基本上也会消耗2048位,因为只有块和文件句柄在内存中


您还可以编写某种代理管理器来缓存和保存已下载的文件,以避免在文件大量下载时进行远程读取(并将其保存在本地一段时间)。

认为
fopen
fread
将是最佳解决方案。但是否有必要将其写入临时文件?我的印象是,只要我发送正确的HTTP下载头(附件头等等),然后只回显文件块,我就可以了?谢谢你的建议。:)不,事实上,如果您粗略地回显它,它是可以的,但是,如果由于某些原因您的用户断开连接,您将需要再次启动该过程。