千家信息网

怎么用PHP写一个资源下载防盗链类

发表于:2025-11-06 作者:千家信息网编辑
千家信息网最后更新 2025年11月06日,这篇文章主要讲解了"怎么用PHP写一个资源下载防盗链类",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"怎么用PHP写一个资源下载防盗链类"吧!以下是自写
千家信息网最后更新 2025年11月06日怎么用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写一个资源下载防盗链类"的内容了,经过本文的学习后,相信大家对怎么用PHP写一个资源下载防盗链类这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

资源 文件 防盗 资源下载 地址 域名 输出 内容 来路 学习 代码 状态 处理 缓冲 最长 二进制 信息 内存 变量 头部 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 数据库原理及应用教程答案 高中数据库管理信息技术 数据库管理数据提高数据独立性 广德自动化软件开发服务销售厂 软件开发授权问题 软件开发报告实训心得体会 帕拉丁 服务器 2006年征信数据库 柳州网络安全相关培训线上学习 软件开发需要什么要求电脑 游戏资金盘软件开发 服务器内存 多大合适 淘宝图片服务器 深信服网络安全认证多少钱 网络安全课题如何写 校长指导学校网络安全教育 做哪个方向的软件开发比较好 北京程序软件开发品牌企业 软件开发定制服务公司哪个好 管理软件用安装到服务器上吗 linux服务器管理面板 服务器发送请求的次数过多 ardiuno数据库用什么 迪茉互联网科技有限公司招聘 计算机网络技术需要学的英语 风豹互联网科技为什么扣款 安全的代理服务器公司 java设置代理服务器 如何利用网络技术进行教学 超微服务器怎么设置光盘启动
0