0

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

我唯一难以理解的是如何正确播放它。我想使用 cURL,但我不确定是否可以分块读取 RapidShare 的下载内容,然后将它们回显给用户。到目前为止,我想到的最好方法是结合使用 fopen、fread、向用户回显文件块、刷新并重复该过程,直到传输整个文件。

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

谢谢你的任何建议。

4

1 回答 1

2

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

Afaik,如果您不想消耗所有 RAM,那么唯一的方法是分两步走。

fopen()首先,使用/ (或任何允许您使用流的 php 函数)流式传输远程文件fread(),将读取分成小块(2048 位可能就足够了),将结果写入/附加到 a tempfile(),然后“回显”回您的用户通过读取临时文件。

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

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

于 2012-06-13T01:51:23.430 回答