12下一页
返回列表 发帖
查看: 3989|回复: 10

[求助] 如何限制附件同时下载的数量和下载的速度

38

主题

146

回帖

228

积分

炉火纯青

贡献
1 点
金币
14 个
发表于 2023-6-28 15:19:16 | 查看全部 |阅读模式
如何限制附件同时下载的数量和下载的速度。

比如每个登录会员只能同时下载3个附件,每个附件的下载速度限制在500kb/s,网页打开不限制速度。
我看宝塔后台有一个流量限制,我试了下,并不是很理想,单IP限制小了,打开网页会有很多图片不显示,刷新才显示。流量限制了,如果同时下载着附件,网页就会打开非常慢,甚至打不开。


并发限制 * 限制当前站点最大并发数
单IP限制 * 限制单个IP访问最大并发数


流量限制 * 限制每个请求的流量上限(单位:KB)


我知道答案 回答被采纳将会获得1 贡献 已有10人回答
回复

使用道具 举报

15

主题

3514

回帖

5991

积分

应用开发者

贡献
417 点
金币
172 个
QQ
发表于 2023-6-28 16:06:39 | 查看全部
https://blog.csdn.net/wangshuminjava/article/details/106047194/
参考这个, 限制一下 常见附件文件类型 并发数和带宽 就可以了
回复

使用道具 举报

44

主题

3271

回帖

5557

积分

应用开发者

Discuz! 运维

贡献
218 点
金币
685 个
QQ
发表于 2023-6-28 16:09:00 | 查看全部
回复

使用道具 举报

38

主题

146

回帖

228

积分

炉火纯青

贡献
1 点
金币
14 个
 楼主| 发表于 2023-6-28 16:27:16 | 查看全部
科站网 发表于 2023-6-28 16:09
可以使用流量限制https://addon.dismall.com/plugins/tshuz_attachrate.html

这样同时下载的人数多,也会影响网站打开速度。
回复

使用道具 举报

38

主题

146

回帖

228

积分

炉火纯青

贡献
1 点
金币
14 个
 楼主| 发表于 2023-6-28 16:32:28 | 查看全部
不知这些还好使吗?

前些天架设了一个小小的Discuz 6 论坛 ,上面上传了一些热门的电子书,相关附件的下载异常火爆。服务器的带宽不大,有些吃力,就想如何能实现附件的限速下载。本来不懂PHP的,网上倒是有PHP限速下载的代码。研究了一下Discuz的代码,实现了一个可行的方案。 很简单,找到attachment.pnp,找到最下面,有个
function getlocalfile($filename, $readmod = 1, $range = 0)  
改成:
function  getlocalfile( $filename ,   $readmod   =   1 ,   $range   =   0 ) {
         if ( $fp   =  @ fopen ( $filename ,   ' rb ' )) {
            @ fseek ( $fp ,   $range );
                 $download_rate   =   10 ; // 限制网速10kb/s
                 while ( ! feof ( $fp ))
               {
                   print   fread ( $fp ,   round ( $download_rate   *   1024 ));
                   flush ();
                   ob_flush ();
                   sleep ( 1 );
                }
        }
        @ fclose ( $fp );
    @ flush (); @ ob_flush (); }
  测试效果还比较明显
回复

使用道具 举报

5

主题

80

回帖

152

积分

渐入佳境

贡献
0 点
金币
57 个
发表于 2023-6-28 18:29:16 | 查看全部
只能定制插件或者自己修改下载逻辑,直接限制单个用户下载并发及下载速度,改为文件流下载,参考下面的代码

  1. // 打开文件流
  2.                         $file = fopen($ziptmp, "r");
  3.                         while (!feof($file)) {
  4.                                 // 发送当前部分文件给浏览者
  5.                                 print fread($file, round($download_rate * 1024));//下载速度控制
  6.                                 // flush 内容输出到浏览器端
  7.                                 ob_flush();  //防止PHP或web服务器的缓存机制影响输出
  8.                                 flush();
  9.                                 // 终端1秒后继续
  10.                                 sleep(1);
  11.                         }
  12.                         // 关闭文件流
复制代码


回复

使用道具 举报

38

主题

146

回帖

228

积分

炉火纯青

贡献
1 点
金币
14 个
 楼主| 发表于 2023-6-29 08:08:14 | 查看全部
wk2012 发表于 2023-6-28 18:29
只能定制插件或者自己修改下载逻辑,直接限制单个用户下载并发及下载速度,改为文件流下载,参考下面的代码 ...

这是修改哪个文件,放在哪个位置?
回复

使用道具 举报

44

主题

3271

回帖

5557

积分

应用开发者

Discuz! 运维

贡献
218 点
金币
685 个
QQ
发表于 2023-6-29 09:15:05 | 查看全部
celover 发表于 2023-6-29 08:08
这是修改哪个文件,放在哪个位置?

只限制速度可以安装:https://addon.dismall.com/?@tshuz_downloadrate.plugin
回复

使用道具 举报

38

主题

146

回帖

228

积分

炉火纯青

贡献
1 点
金币
14 个
 楼主| 发表于 2023-6-29 14:59:58 | 查看全部
科站网 发表于 2023-6-29 09:15
只限制速度可以安装:https://addon.dismall.com/?@tshuz_downloadrate.plugin

能再加上限制每个会员同时下载数量的限制吗,比如一个会员同时只能下载2个附件,每个附件下载速度200k
回复

使用道具 举报

38

主题

146

回帖

228

积分

炉火纯青

贡献
1 点
金币
14 个
 楼主| 发表于 2023-6-29 15:00:57 | 查看全部
科站网 发表于 2023-6-29 09:15
只限制速度可以安装:https://addon.dismall.com/?@tshuz_downloadrate.plugin

如果仅仅是限制下载速度,如果这个会员同时下载几十个附件,网站速度也有可能给拖垮。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 关注公众号
  • 有偿服务微信
  • 有偿服务QQ

手机版|小黑屋|Discuz! 官方交流社区 ( 皖ICP备16010102号 |皖公网安备34010302002376号 )|网站地图|star

GMT+8, 2025-12-20 15:15 , Processed in 0.047175 second(s), 9 queries , Redis On.

Powered by Discuz! X5.0 Licensed

© 2001-2025 Discuz! Team.

关灯 在本版发帖
有偿服务QQ
有偿服务微信
返回顶部
快速回复 返回顶部 返回列表