貌似这个东西实用性不是不大,就是写着好玩吧。
介绍:脚本可以隐藏图片的真实地址,起到防盗链的作用(似乎对IE兼容不佳,以后有空再慢慢弄吧),脚本能根据GET变量调用不同的图片。而且脚本使用了Nginx的X-sendfile特性大大提升了使用效率。
P.S:脚本写的很渣,大家看看就行了。
<?php include 'function.php'; session_start(); //获取GET数据 $n = $_GET["n"]; $f = $_GET["f"]; $h = $_GET["h"]; $aid = $_GET["aid"]; //如果AID为空对浏览器进行跳转,获取AID if($aid == "") { $_SESSION["AID"] = md5($_SERVER["REMOTE_ADDR"].$_SERVER["REMOTE_PORT"]); $aid = $_SESSION["AID"]; header("Location: ./pic.php?n=$n&f=$f&h=$h&aid=$aid"); exit; } //对比获取到的AID和SESSION中的数据 //获取文件后缀类型,并设置header if($_SESSION["AID"] != $aid){ header("content-type:image/png"); MsgImg("对不起,此图片链接已经失效!"); exit; }else { $hz=Check($h,1,1,1); switch($hz) { case 1: $hz = jpg; header("content-type:image/jpeg"); break; case 2: $hz = jpge; header("content-type:image/jpeg"); break; case 3: $hz = gif; header("content-type:image/gif"); break; case 4: $hz = png; header("content-type:image/x-png"); break; default: unset($hz); } } $name = Check($n,1,30,0).'.'.$hz;//源图片名 $floor = Check($f,2,5,0);//源目录 //判断是否有变量为空 if($hz == "" || $name == "" || $floor == "") { header("content-type:image/png"); MsgImg("对不起,找不到该图片!"); quit(); } //判断文件时候存在,如存在则输出所选。不存在则输出文字信息。 if(file_exists("./upload/$floor/$name")) { //图片的实际路径 $filePath = "/download/$floor/$name";//完整路径使用Nginx的X-sendfile输出图片。 header('X-Accel-Redirect: '.$filePath); //@readfile("./upload/$floor/$name"); quit(); }else { header("content-type:image/png"); MsgImg("对不起,找不到该图片!"); quit(); } function quit() { session_unset(); session_destroy(); exit(); } ?>
function.php文件
<?php //检查输入数据 function Check($name,$min,$max,$suffix) { $Max_Strlen=$max;//最大长度 $Min_Strlen=$min;//最短长度 if($suffix == "1") { $Chars="^[0-9]";//检查字符为纯数字 } else { $Chars="^[A-Za-z0-9_-]";//检查字符 } $Output = "$name";//定义返回的字符串变量 if(!mb_ereg("$Chars",$name)) { //正则表达式匹配检查 $Output=""; return $Output; } if (strlen($name)<$Min_Strlen || strlen($name)>$Max_Strlen) { $Output=""; return $Output; } return $Output; } function MsgImg($msg){ // 创建图片 $im = imagecreatetruecolor(400, 30); // 设置颜色 $white = imagecolorallocate($im, 255, 255, 255); $grey = imagecolorallocate($im, 128, 128, 128); $black = imagecolorallocate($im, 0, 0, 0); imagefilledrectangle($im, 0, 0, 399, 29, $white); // 设置字体 $font = 'wd.ttf'; // 设置阴影 imagettftext($im, 20, 0, 11, 21, $grey, $font, $msg); // 打印文字 imagettftext($im, 20, 0, 10, 20, $black, $font, $msg); // 创建PNG文件 imagepng($im); imagedestroy($im); } ?>