PHP写的资源下载防盗链类分享

2015-01-24信息快讯网

这篇文章主要介绍了PHP写的资源下载防盗链类分享,需要的朋友可以参考下

这几天在写一个PHP防盗链外部资源下载处理函数,昨天晚上刚完成编写,中间遇到了些问题,这里就不详述了;
以下是自写的简单的PHP防盗链处理类(重新整理编写成类文件,以便后期改进);

<?php
/**
 *
 * 防盗链外部资源下载处理类
 * 
 * @link   http://jb51.net
 * 
 */
class BurglarDow{
 /**
     * 初始许可下载状态
     * @var    allow
     * @access private
     */
 private $allow      =  false;
 /**
     * 初始下载地址
     * @var    dowUrl
     * @access private
     */
 private $dowUrl     =  null;
 /**
     * 初始来路域名
     * @var    RemoteUrl
     * @access private
     */
 private $RemoteUrl  =  null;
 /**
     * 初始许可资源取用域名列表
     * @var    allowUrl
     * @access private
     */
 private $allowUrl   =  array();
 /**
     * 初始转跳地址
     * @var    Location
     * @access private
     */
 private $Location   =  null;

public function __construct($dowUrl,$Location,array $allowUrl){ // 初始下载地址 $this->dowUrl = $dowUrl; // 初始许可资源取用域名列表 $this->allowUrl = $allowUrl; // 初始转跳地址 $this->Location = $Location;

$this->RemoteUrl = @parse_url($_SERVER['HTTP_REFERER']); // 获取来路域名 if(!is_array($this->RemoteUrl)) header("HTTP/1.1 301 Moved Permanently"); header("Location: ".$this->Location);

if(isset($this->RemoteUrl['host'])){ if(in_array($this->RemoteUrl['host'],$this->allowUrl)){ // 判断是否来至许可域名 $this->allow = true; // 下载许可状态为:真 } } unset($this->allowUrl,$this->RemoteUrl); // 释放内存变量 }

/** * 防盗链资源下载 * @access public * @return mixed */ public function dow(){ $FileInfo = get_headers($this->dowUrl,1); // 获取远程文件头部信息

if(true === $this->allow){ // 判断是否许可下载资源 //判断配置文件是否存在 if(is_file('Config.ini')){ $FileCon = parse_ini_file('Config.ini'); }else{ $FileName = basename($FileInfo['Content-Location']); $FileConStr = "FileName = {$FileName}\r\nFileUrl = {$FileInfo['Content-Location']}\r\nFileSize = {$FileInfo['Content-Length']}"; $handle = fopen ('Config.ini', "wb"); // Config.ini文件不存在则创建文件 if (fwrite ($handle, $FileConStr) == FALSE) { // 数据写入文件 echo "File creation failed ..."; } fclose ($handle); // 关闭一个已打开的文件指针 $FileCon = parse_ini_file('Config.ini'); } if(!empty($$this->dowUrl)){ $fp = @fopen($$this->dowUrl, "rb"); // 二进制模式读取文件 if (!$fp) exit("Download a mistake.\n\n");

// 输出远程资源 header("Content-type:text/html;charset=utf-8"); header('Content-Description: File Transfer'); header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename='.$FileCon['FileName']); header("Accept-Ranges: bytes"); header('Content-Transfer-Encoding: binary'); header('Expires: 0'); header('Cache-Control:must-revalidate,post-check=0,pre-check=0'); header('Pragma: public'); header('Content-Length: '.$FileCon['FileSize']); while (!feof($fp)){ set_time_limit(0); // 设置文件最长执行时间 echo fread($fp, 1024); // 输出文件 flush(); // 输出缓冲 ob_flush(); // 输出缓冲区中的内容 } fclose($fp); }else{ header("HTTP/1.1 404 Not Found"); } }else{ header("HTTP/1.1 301 Moved Permanently"); header("Location: ".$this->Location); } } } // 远程资源地址 $dowUrl = 'http://dldir1.qq.com/qqfile/qq/QQ5.1/10055/QQ5.1.exe'; // 转跳地址 $Location = 'http://jb51.net'; // 许可来路域名列表 $allowUrl = array( 'jb51.net', ); $BurglarDow = new BurglarDow($dowUrl,$Location,$allowUrl); $BurglarDow -> dow();

php实现把url转换迅雷thunder资源下载地址的方法
PHP大转盘中奖概率算法实例
PHP与MYSQL中UTF8编码的中文排序实例
php cookie中点号(句号)自动转为下划线问题
php时间戳格式化显示友好的时间函数分享
ThinkPHP整合百度Ueditor图文教程
php实现扫描二维码根据浏览器类型访问不同下载地址
PHP实现文件下载断点续传详解
php实现的支持断点续传的文件下载类
PHP实现自动登入google play下载app report的方法
PHP防盗链代码实例
php实现文件下载代码分享
Yii2使用小技巧之通过 Composer 添加 FontAwesome 字体资源
ThinkPHP模板引擎之导入资源文件方法详解
PHP资源管理框架Assetic简介
使用PHP破解防盗链图片的一个简单方法
PHP函数getenv简介和使用实例
php结合ajax实现赞、顶、踩功能实例
PHP中spl_autoload_register()和__autoload()区别分析
linux使用crontab实现PHP执行计划定时任务
PHP FTP操作类代码( 上传、拷贝、移动、删除文件/创建目录)
php判断电脑访问、手机访问的例子
php实现文件下载功能的几个代码分享
php下载文件源代码(强制任意文件格式下载)
关于php支持分块与断点续传文件下载功能代码
ASP和PHP实现生成网站快捷方式并下载到桌面的方法
php强制文件下载而非在浏览器打开的自定义函数分享
详解PHP内置访问资源的超时时间 time_out file_get_contents read_file
php中突破基于HTTP_REFERER的防盗链措施(stream_context_create)
php下通过伪造http头破解防盗链的代码
php防盗链的常用方法小结
破解图片防盗链的代码(asp/php)测试通过
©2014-2024 dbsqp.com