<?php
$url="http://domain/1.png?v=1";
$url = explode("?", $url);
$path=basename($url[0]);
$path="/".$path;
$time = time()+3600;
$T=dechex($time);
$key="xxxx";
$S=$key.$path.$T;
$token = md5($S);
$sign =strtolower($token);
if(isset($url[1])){
$url = "http://domain".$path."?".$url[1]."&sign=".$sign."&t=".$T;
echo($url);
}else{
$url = "http://domain".$path."?sign=".$sign."&t=".$T;
echo($url);
}
/*
二、算法说明
基于时间戳的防盗链是通过对时间有关的字符串进行签名,将时间、签名通过一定的方式传递给
CDN服务器作为判定依据,CDN边缘节点根据约定的算法判断来访URL是否有访问权限。
通过,执行下一步;不通过,响应HTTP status code 403。
若同时配置了Referer、UA防盗链、时间戳防盗链,有一项不满足条件,即为不通过,响应 403 。
签名参数
● T:URL过期时间。按unix_time的16进制小写形式表示。 如 2015-08-01 00:00:00 –>
1438358400 –> 55bb9b80
● key: 和CDN协商的加密字符串
● path:访问资源的URL中的路径部分,例如:访问的URL为http://xxx.yyy.com/DIR1/dir2/
vodfile.mp4?v=1.1,则path=/DIR1/dir2/vodfile.mp4(注意不含querystring部分)
● 签名字原始符串S=key + path + T
● 签名SIGN=md5(S).to_lower(),to_lower指将字符串转换为小写
例如:访问的URL为 http://xxx.yyy.com/DIR1/dir2/vodfile.mp4?v=1.1,假设key=12345678,T=55bb9b80,
则S=12345678/DIR1/dir2/vodfile.mp455bb9b80,SIGN=19eb212771e87cc3d478b9f32d6c7bf9
签名参数传递方式
作为URL查询参数。
例如原始访问的URL为: http://xxx.yyy.com/DIR1/dir2/vodfile.mp4?v=1.1
最终形成的访问URL为: http://xxx.yyy.com/DIR1/dir2/vodfile.mp4?v=1.1&sign=<SIGN>&t=<T>
● 签名参数 sign、 t ;
● <SIGN>、<T> 替换为对应的值, 实际url中不含<> ;
/DIR1/dir2/vodfile.mp4?sign=83a880fd7aa06f3d3c6caa54d8f164ec&t=55bbefe0
*/
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。