PHP下载问题

时间:2009-12-06 20:24:21

标签: php curl downloading

在我的网站上,用户可以输入文件链接,我可以通过我的服务器将下载过程流式传输给他们。我使用这样的系统:

header('Cache-control: private');
header('Content-Type: application/octet-stream'); 
header('Content-Length: ' . $r[2]);
header('Content-Disposition: filename=' . $theName);

flush();

$file = fopen($fileName, "r");
while(!feof($file))
{
    print fread($file, 10240);  
    flush();
    sleep(1);
}
fclose($fileName);

我认为,我的用户下载速度非常慢(600kb / s)。托管的服务器位于1Gbit端口上,因此它们应该将其互联网连接最大化十倍。

我想知道是否有更好的方法来做这种事情,也许是cURL?我对cURL没有太多经验,但我很感激任何反馈。

感谢。

3 个答案:

答案 0 :(得分:2)

使用readfile

如果你坚持你的方法,那么这种方式会更有效率,没有同花顺和睡眠:

while(!feof($file)) {
   print fread($file, 10240);  
}

原因如下:

  • 使用flush()可以防止正常缓冲区正常运行,
  • 使用sleep(1)通过每10 KiB暂停1秒来有效降低传输速度。

答案 1 :(得分:1)

我不确定你在这里尝试做什么..不明白为什么你需要那个循环而且特别不明白为什么你需要睡眠()..你应该只使用readfile或类似的东西而不是那个循环,它会非常有效

另外您认为curl对您有何帮助?

答案 2 :(得分:1)

如果不是@Sabeen Malik指出的一秒睡眠(),则很可能是由于您的网络提供商施加的服务器端限制(例如使用mod_throttle或mod_bandwidth)或您正在提取的网络提供商数据来自。