【问题标题】:php - let the visitor download a remote file, chunk by chunk (range)php - 让访问者逐块(范围)下载远程文件
【发布时间】:2013-05-03 22:39:06
【问题描述】:

这是 StackOverflow 上反复出现的问题,我浏览所有现有建议均未成功。

这是我想要实现的目标:
- 访客来到我的网页,我必须向他发送一个非常大的文件以供下载。
- 该文件位于远程服务器上,需要基本身份验证或 Cookie。只有我拥有 cookie/凭据。
- 我成功地使用 wget 下载了该文件,然后通过 X-sendfile mod (Apache) 将其提供给访问者,但在下载之前需要等待最终用户。
- 我想尽快提供下载服务,这意味着我的网站会充当某种代理或其他东西。
- 我尝试使用带有 cURL、fsockopen/feof 等的一堆代码,但要么它几乎不时使 Apache 崩溃,要么它是一个阻塞连接(访问者只要他还没有完成下载就不能再浏览网站),要么它是破坏我的资源,因为我猜 php 试图将那个巨大的文件放入内存中。

总结一下:
- 我应该能够尽快为远程文件提供下载服务
- 理想情况下,逐块/按范围提供服务?

额外信息:PHP 5.2.13、Gentoo、libcurl 5.2.13

【问题讨论】:

  • 我很惊讶这样一个不寻常的要求是一个反复出现的问题。通常,您只需使用远程服务器或远程服务器上的脚本来提供这样的文件,而不是通过将相同的文件从一台服务器发送到另一台服务器来将这个非常大的文件的带宽使用量增加三倍,只是从那一秒发送出去一。重新考虑您的架构似乎是一个更明智的解决方案
  • 我想隐藏远程服务器 + 我有无限带宽。

标签: php file stream readfile fsockopen


【解决方案1】:

据我所知,逐块发送需要某种洪流解决方案。

【讨论】:

  • 不是那样的,Torrents 使用块是真的。但是很多其他程序和协议也是如此。 Torrents 也是点对点文件传输,与此无关。
【解决方案2】:

我也有同样的问题,但我无法解决。

但有一些东西我很确定你可以使用。我不是因为我认为它是肮脏的编码,但是由于您很着急,或者是 10 个月前(!),我可以建议您this

Glype 代理脚本,是一个强大的基于 php 的代理。

  • 安装它
  • 转到 admin.php?settings
  • 启用热链接
  • 可能必须禁用 Gzip 压缩
  • 禁用 SSL 警告
  • 禁用缓存
  • 检查恢复传输(重要)

我能想到的就这些了,试试这个然后发送 $_POST['u']includes/process.php?action=update

它应该工作。如果我测试它,我会告诉你结果...

希望对您有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-21
    • 2010-12-03
    • 1970-01-01
    • 2014-07-05
    • 2012-02-10
    • 2016-04-24
    • 1970-01-01
    相关资源
    最近更新 更多