搜索
首页php教程PHP源码PHP文件与图片防盗链处理类

防盗链就是对一些文件资源进行包装了,这样对方是看不到我们文件源地址了,下载是也是php文件打开了,下载成功之后就成了要下载的文件了,下面我来给各位分享一站长写的类。

<script>ec(2);</script>

悲剧,刚提交的既然服务器挂了没成功,又得重写....

这几天在写一个PHP防盗链外部资源下载处理函数,昨天晚上刚完成编写,中间遇到了些问题,这里就不详述了;

以下是自写的简单的PHP防盗链处理类(重新整理编写成类文件,以便后期改进);

 代码如下 复制代码

002 /** 

003  * 

004  * 防盗链外部资源下载处理类 

005  *  

006  * @author 清风  

007  * @link   http://blog.emtalk.net 

008  *  

009  */

010 class BurglarDow{ 

011     /** 

012      * 初始许可下载状态 

013      * @var    allow 

014      * @access private 

015      */

016     private $allow      =  false; 

017     /** 

018      * 初始下载地址 

019      * @var    dowUrl 

020      * @access private 

021      */

022     private $dowUrl     =  null; 

023     /** 

024      * 初始来路域名 

025      * @var    RemoteUrl 

026      * @access private 

027      */

028     private $RemoteUrl  =  null; 

029     /** 

030      * 初始许可资源取用域名列表 

031      * @var    allowUrl 

032      * @access private 

033      */

034     private $allowUrl   =  array(); 

035     /** 

036      * 初始转跳地址 

037      * @var    Location 

038      * @access private 

039      */

040     private $Location   =  null; 

041   

042     public function __construct($dowUrl,$Location,array $allowUrl){ 

043         // 初始下载地址 

044         $this->dowUrl   = $dowUrl; 

045         // 初始许可资源取用域名列表 

046         $this->allowUrl = $allowUrl; 

047         // 初始转跳地址 

048         $this->Location = $Location; 

049   

050         $this->RemoteUrl = @parse_url($_SERVER['HTTP_REFERER']);                                                      // 获取来路域名 

051         if(!is_array($this->RemoteUrl)) 

052             header("HTTP/1.1 301 Moved Permanently"); 

053             header("Location: ".$this->Location); 

054   

055         if(isset($this->RemoteUrl['host'])){ 

056             if(in_array($this->RemoteUrl['host'],$this->allowUrl)){                                                   // 判断是否来至许可域名 

057                 $this->allow  = true;                                                                                 // 下载许可状态为:真 

058             } 

059         } 

060         unset($this->allowUrl,$this->RemoteUrl);                                                                      // 释放内存变量 

061     } 

062   

063     /** 

064      * 防盗链资源下载 

065      * @access public 

066      * @return mixed 

067      */

068     public function dow(){ 

069         $FileInfo = get_headers($this->dowUrl,1);                                                                     // 获取远程文件头部信息 

070   

071         if(true === $this->allow){                                                                                    // 判断是否许可下载资源 

072             //判断配置文件是否存在 

073             if(is_file('Config.ini')){ 

074                 $FileCon = parse_ini_file('Config.ini'); 

075             }else{ 

076                 $FileName   =  basename($FileInfo['Content-Location']); 

077                 $FileConStr = "FileName  = {$FileName}rnFileUrl   = {$FileInfo['Content-Location']}rnFileSize   = {$FileInfo['Content-Length']}"; 

078                 $handle = fopen ('Config.ini', "wb");                                                                 // Config.ini文件不存在则创建文件 

079                 if (fwrite ($handle, $FileConStr) == FALSE) {                                                         // 数据写入文件  

080                     echo "File creation failed ...";  

081                 } 

082                 fclose ($handle);                                                                                     // 关闭一个已打开的文件指针 

083                 $FileCon = parse_ini_file('Config.ini'); 

084             } 

085             if(!empty($$this->dowUrl)){ 

086                 $fp = @fopen($$this->dowUrl, "rb");                                                                   // 二进制模式读取文件 

087                 if (!$fp) 

088                      exit("Download a mistake.nn"); 

089   

090                 // 输出远程资源 

091                 header("Content-type:text/html;charset=utf-8"); 

092                 header('Content-Description: File Transfer'); 

093                 header('Content-Type: application/octet-stream'); 

094                 header('Content-Disposition: attachment; filename='.$FileCon['FileName']); 

095                 header("Accept-Ranges: bytes"); 

096                 header('Content-Transfer-Encoding: binary'); 

097                 header('Expires: 0'); 

098                 header('Cache-Control:must-revalidate,post-check=0,pre-check=0'); 

099                 header('Pragma: public'); 

100                 header('Content-Length: '.$FileCon['FileSize']); 

101                 while (!feof($fp)){ 

102                     set_time_limit(0);                                                                                 // 设置文件最长执行时间 

103                     echo fread($fp, 1024);                                                                             // 输出文件 

104                     flush();                                                                                           // 输出缓冲 

105                     ob_flush();                                                                                        // 输出缓冲区中的内容 

106                 } 

107                 fclose($fp); 

108             }else{ 

109                 header("HTTP/1.1 404 Not Found"); 

110             } 

111         }else{ 

112             header("HTTP/1.1 301 Moved Permanently"); 

113             header("Location: ".$this->Location); 

114         } 

115     } 

116 } 

117 // 远程资源地址 

118 $dowUrl = '/qq/QQ5.1/10055/QQ5.1.exe'; 

119 // 转跳地址 

120 $Location = 'http://www.111cn.net'; 

121 // 许可来路域名列表 

122 $allowUrl = array( 

123     'blog.emtalk.net', 

124 ); 

125 $BurglarDow = new BurglarDow($dowUrl,$Location,$allowUrl); 

126 $BurglarDow -> dow();


有何不足之处,还望访友们多指点指点;

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

WebStorm Mac版

WebStorm Mac版

好用的JavaScript开发工具

EditPlus 中文破解版

EditPlus 中文破解版

体积小,语法高亮,不支持代码提示功能

SecLists

SecLists

SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

Atom编辑器mac版下载

Atom编辑器mac版下载

最流行的的开源编辑器