PHP下载问题

PHP下载问题,php,curl,download,Php,Curl,Download,在我的网站上,用户可以输入指向文件的链接,我可以通过我的服务器将下载过程传输给他们。我使用这样的系统: header('Cache-control: private'); header('Content-Type: application/octet-stream'); header('Content-Length: ' . $r[2]); header('Content-Disposition: filename=' . $theName); flush(); $file = fopen

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

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端口上,因此他们应该将其internet连接最大化十倍

我想知道是否有更好的方法来做这类事情,也许是卷曲?我在卷发方面没有太多经验,但我希望得到任何反馈

谢谢。

请使用

如果你坚持你的方法,那么这种方法会更有效率,没有潮水和睡眠:

while(!feof($file)) {
   print fread($file, 10240);  
}
原因如下:

  • 使用flush()可以阻止正常的缓冲区工作,并且
  • 使用睡眠(1)每10 KiBs暂停1秒钟,可以有效降低传输速度。
使用

如果你坚持你的方法,那么这种方法会更有效率,没有潮水和睡眠:

while(!feof($file)) {
   print fread($file, 10240);  
}
原因如下:

  • 使用flush()可以阻止正常的缓冲区工作,并且

  • 使用睡眠(1)每10 KiBs暂停1秒钟,可以有效地降低传输速度。
我不太清楚您在这里想做什么。。不明白你为什么需要这个循环,特别是不明白你为什么需要睡眠()。。你应该使用readfile或者类似的东西来代替那个循环,这会非常有效


还有,你认为curl对你有什么帮助?

我真的不知道你在这里想做什么。。不明白你为什么需要这个循环,特别是不明白你为什么需要睡眠()。。你应该使用readfile或者类似的东西来代替那个循环,这会非常有效


还有,你认为curl会对你有什么帮助?

如果不是@Sabeen Malik指出的1秒睡眠(),那么很可能是由于你的网络提供商(例如使用mod_节流或mod_带宽)或你从中获取数据的网络提供商施加的服务器端限制。

如果不是1秒睡眠())@Sabeen Malik指出,这很可能是由于您的web提供商(例如使用mod_throttle或mod_带宽)或您从中获取数据的web提供商施加的服务器端限制。

尝试打印一些静态字符串(在循环或其他方式中),而不是从文件中读取。这将帮助您确定磁盘访问是否是问题的原因。我认为他正在从用户指定的远程服务器实时获取数据。请尝试打印一些静态字符串(在循环或其他方式中),而不是从文件中读取。这将帮助您确定磁盘访问是否是问题的原因。我认为他正在从用户指定的远程服务器实时获取数据。我没有注意到睡眠,+1我没有注意到睡眠,+1