PHP / Javascript:如何限制下载速度?

前端之家收集整理的这篇文章主要介绍了PHP / Javascript:如何限制下载速度?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有以下情况:
您可以从我们的服务器下载一些文件.如果您是“普通”用户,则您的带宽有限,例如500kbits.如果您是高级用户,您的带宽没有限制,可以尽快下载.但是我怎么能意识到这一点?
如何上传&合作?
注意:您可以使用 PHP执行此操作,但我建议您让服务器本身处理调节.这个答案的第一部分涉及你的选择是什么,如果你想限制PHP的下载速度,但下面你会发现几个链接,你会发现如何管理下载限制使用服务器.

有一个PECL扩展,这使得这是一个非常简单的任务,称为pecl_http,其中包含函数http_throttle.文档包含一个简单的例子,如何做到这一点.这个扩展还包含a HttpResponse class,这是没有很好的文档的ATM,但我怀疑使用其setThrottleDelay玩和setBufferSize方法应该产生所需的结果(油门延迟=> 0.001,缓冲区大小20 ==〜20Kb /秒).从事物的外观,这应该是工作:

$download = new HttpResponse();
$download->setFile('yourFile.ext');
$download->setBufferSize(20);
$download->setThrottleDelay(.001);
//set headers using either the corresponding methods:
$download->setContentType('application/octet-stream');
//or the setHeader method
$download->setHeader('Content-Length',filesize('yourFile.ext'));
$download->send();

如果你不能/不想安装它,你可以写一个简单的循环:

$file = array(
    'fname' => 'yourFile.ext','size'  => filesize('yourFile.ext')
);
header('Content-Type: application/octet-stream');
header('Content-Description: file transfer');
header(
    sprintf(
        'Content-Disposition: attachment; filename="%s"',$file['fname']
    )
);
header('Content-Length: '. $file['size']);
$open = fopen($file['fname'],"rb");
//handle error if (!$fh)
while($chunk = fread($fh,2048))//read 2Kb
{
    echo $chunk;
    usleep(100);//wait 1/10th of a second
}

当然,不要缓冲输出,如果你这样做:),最好添加一个set_time_limit(0);声明也.如果文件很大,很可能您的脚本将在下载过程中遇害,因为它会触发最大执行时间.

另一种(也许最好的)方法是通过服务器配置来限制下载速度:

> using NGINX
> using Apache2
> using MS IIS(要么安装比特率调节模块,要么设置最大带宽)

我从来没有限制自己的下载速度,但是看着这些链接,我认为很简单,说Nginx是最简单的:

location ^~ /downloadable/ {
    limit_rate_after 0m;
    limit_rate 20k;
}

这使得速率限制立即启动,并将其设置为20k.详情可在the nginx wiki找到.

就apache而言,这并不是那么难,但是它需要你启用鼠标模块

LoadModule ratelimit_module modules/mod_ratelimit.so

然后,告诉apache哪个文件应该被限制是一个简单的事情:

<IfModule mod_ratelimit.c>
    <Location /downloadable>
        SetOutputFilter RATE_LIMIT
        SetEnv rate-limit 20
    </Location>
</IfModule>

猜你在找的PHP相关文章