给班级做作业管理系统,提供作业打包下载功能。但是因为盗链存在。。使得流量总是超出,导致网站停止。 我用的是万网的免费主机,当年活动免费申请的,免费使用两年。给了1G的空间和每月10G的流量。
我的网站的功能就是学生分别提交自己的作业,等时间差不多了,再由学习委员打包下载。
后来突然有一天邮件提醒我的流量使用超过了限制。。访问网页也提示流量耗尽了。
其实我每月才交一两次作业,每个作业的大小大概是300k,一共50人。反正再怎么使用都不会超过10G的。。引起了我的怀疑。准备查查流量的报告。
查到短短三天使用了10个G。。不现实啊。。。
再往下看,zip的下载量特别大。。。其实zip文件就是打包后学习委员下载的文件。
原因猜测。。由于文件的存在,学习委员下载后。。莫名的这个链接被某些未知人员得到。。疯狂的进行下载。。从而导致流量超出。下面就说说如何避免。
关于将文件打包的过程,可以自行百度得到,不再赘述。
先看看原来的代码:
1 2 3 4 5 6 7 8 | $url = "http://***/Uploads/works/".$assignmentId.".zip"; echo "<head> <meta charset='UTF-8'> </head> <br/> <center> <a href ='".$url."' target='"."_blank"."'>下载地址</a> </center>"; |
可见原来的代码是将文件地址拼接后形成下载链接的。这就容易盗链。 看一下更改后的代码:
1 2 3 4 5 6 7 8 | $url = U('Assignments/downloading',array('assignmentId'=>$assignmentId,'showname'=>$showname)); echo "<head> <meta charset='UTF-8'> </head> <br/> <center> <a href ='".$url."' target='"."_blank"."'>下载地址</a> </center>"; |
这里是显示出的不是文件地址,而是一个导向一个下载文件的也面,本代码中使用的是Thinkphp中的语法,array中是参数。 在downloading中的内容代码为:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | $filename="./Uploads/works/".$assignmentId.'.zip';//定位文件地址 if(file_exists($filename)){ $date=date("Ymd-H:i:m"); header( "Content-type: application/octet-stream "); header( "Accept-Ranges: bytes "); header( "Content-Disposition: attachment; filename= ".$showname.".zip"); //设置下载的文件名 $size=readfile($filename); //读入内存下载 header( "Accept-Length: " .$size);//设置大小 unlink($filename);//由于下载后就没用了,为了防止盗链,故下载后即删除 }else{ echo "<head> <meta charset='UTF-8'> </head> <br/> <center> 文件不存在 </center>"; } |
由此,从此网站并不存在下载的文件,无法通过地址得到下载内容,即便访问也无法得到。
发表评论:
评论列表: