被下载附件占满宽带,是站长的奇大耻辱啊!下面,附上解决方法,限制下载速度,都轻车路熟的,能用代码解决的,这都不算什么难事。一个PHP文件就行了,哪里需要自建网盘。
教程开始
新建一个 index.php 代码如下
<?php error_reporting(0); header('Content-type:text/html;charset=utf-8'); $doby = '<p>第一段</p><p>第二段</p><h2>本地下载</h2><p><a href="vv.php?zip=/member/dedecms-utf8.rar">本地下载</a></p><p>第三段</p>'; echo $doby; exit(); ?>
从跳转页下载,没毛病。
再新建一个 vv.php 代码如下
<?php error_reporting(0); $zip = isset($_GET['zip']) ? $_GET['zip'] : ''; if (!empty($zip)) { $local_file = dirname(__FILE__).$zip; //将附件重命名 if (strpos($local_file,'.rar')) { $download_file = 'download.rar'; } elseif (strpos($local_file,'.7z')) { $download_file = 'download.7z'; } elseif (strpos($local_file,'.txt')) { $download_file = 'download.txt'; } elseif (strpos($local_file,'.gz')) { $download_file = 'download.gz'; } elseif (strpos($local_file,'.bz2')) { $download_file = 'download.bz2'; }else{ $download_file = 'download.zip'; } //设置最大下载速率(=> 300,5 kb/s) $download_rate = 300.5; if(file_exists($local_file) && is_file($local_file)) { // 发送 headers header('Cache-control: private'); header('Content-Type: application/octet-stream'); header('Content-Length: '.filesize($local_file)); header('Content-Disposition: filename='.$download_file); // flush 内容 flush(); // 打开文件流 $file = fopen($local_file, "r"); while (!feof($file)) { // 发送当前部分文件给浏览者 print fread($file, round($download_rate * 1024)); // flush 内容输出到浏览器端 flush(); ob_flush(); //防止PHP或web服务器的缓存机制影响输出 // 终端1秒后继续 sleep(1); } // 关闭文件流 fclose($file); } else { echo 'Error: 你来慢了,链接不存在或失效!';exit(); } exit(); } echo 'Internal Server Error!'; exit(); ?>
这个下载页啊,我把反抓删除了,发挥你的想象,加写条件限制就很完美了。
附件下载
不用瞎折腾,懒人包送上,还有继续往下看。
没有作用
上面,肯定是没有作用的。因为下载链接没加密,还能直接下载啊!上伪静态规则,禁止直接下载。Nginx伪静态规则如下
location ~ ^/(member)/(.*)\.(zip|rar|7z|gz|bz2)$ { return 403; }
禁止附件目录运行指定脚本就行了。当然了,还可以加密,Base64加密没用,得上秘钥的那种才行。你看百度加密链接,就没人能够把它破解,参考教程如下
确实,加配置、OSS、CDN加速等,烧钱都能解决,但是,这是不花钱就能解决的事情啊。
调用方法
源码都给你了,关于调用方法,你可以找AI问问嘛。
+30 30 个回复 | 最后更新于 2025-01-16
登录后方可回帖