详解PHP防⽌盗链防⽌迅雷下载的⽅法
防⽌盗链:
原理:当服务器要我们下载⽂件的时候,我们会拿到⼀个链接,然后我们通过这个链接到这个⽂件,然后将它下载下来。那么也就是说这个链接必须要有的,那么如何防⽌盗链呢?那就是给你的链接并不是真正的⽂件链接了。这⼀点很容易想到,那么不给你真正的链接⼜怎样让你下载⽂件呢?
我们在⽤php做⽹页的时候,总是会把php代码穿插在HTML代码中间,然后⽤php去⽣成剩下的代码,然后传给客户端,也就是说客户端会接受到我们php脚本运⾏的结果。也就是说:如果我的php脚本运⾏的结果就是你要下载的⽂件。这样我们就实现了⽂件防盗链。就是说你能得到的链接就是这个php⽂件,然后再由这个百变php⽂件变成你想要的⽂件来供你下载。
代码如下:
$FileAddress: ⽂件的相对路径。
$DownloadName: ⽂件下载到客户端的名字。
if(file_exists($FileAddress) && $file=fopen($FileAddress,'r')) { //⾸先要判断⽂件是否存在,如果⽂件跟本不存在的话,后边的代码也是⽩费。
Header('content-type:application/octet-stream'); //声明⽂件类型,这⾥是为了让客户端下载它,⽽不是打开它,所以声明为未知⼆进制⽂件。否则客户端会根据其⽂件类型在线打开它。
Header('content-Length:'.filesize($FileAddress)); //声明⽂件的⼤⼩,告诉客户端这个⽂件的⼤⼩,否则客户端下载的时候看不到进度。
Header('content-disposition:attachment;filename='.$DownloadName); //声明⽂件名,这⾥就是告诉客户端它要下载的⽂件的名字,否则名字就会是你php⽂件的名字。
echo fread($file,filesize($FileAddress)); //这⾥就是将加载的⽂件echo出来,因此这个php⽂件不能出现其他任何的⽂字,就是说这⾥若是出现了任何其他的输出的话都会输出到客户端下载的⽂件⾥。
fclose($file); //最后关闭句柄。
}
上边这些代码就成功的胜任了防⽌盗链的任务,只需要定义那两个变量就可以。那两个变量可以通过GET来获取,⽐如我们将⽂件实际链接与它的编号在数据库中做⼀个映射,我们只需要GET到⼀个⽂件ID即可对⽂件进⾏下载,保证了我们真实⽂件地址的安全。当然也可以是对⽂件真实链接进⾏加密之类的,总之就是不要讲真实链接再放到客户端可以看到的地⽅就好。
防⽌迅雷下载
其实通过上边的代码,我们只能做到链接的隐藏,并不能防⽌客户端⽤迅雷等⼯具对其进⾏下载。那么如何做到防⽌⽤迅雷等⼯具下载它呢?php如何运行代码
正如我之前所说我们可以通过各种途径来使php⽂件得到这个⽂件的路径,那么,我们只要不要将这些信息加在链接⾥边就好了。⽐如:可以通过POST来传输⽂件的ID,可以通过session来传输⽂件的ID。
这就是我所说的:花式授权下载。
1.我们可以在下载的前导页写⼊客户端session,来储存其授权码,将⽂件ID也储存进去,然后再在下载的php⾥加⼊验证session的代码,这样就算客户端将连接输⼊迅雷下载也是没有⽤的。
2.我们可以在下载的前导页加⼊⼀个隐藏的表单,⽤POST提交给实现下载功能的php,这样也能达到防⽌第三⽅下载⼯具下载的⽬的。
总之这样的⽅法很多,上⾯两种⽅法提供参考,主要的思路就是将要下载⽂件的信息和链接分开来,这样就可以达到只凭⼀个链接⽆法下载⽂件的⽬的。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。