PHP调用显示图片,防止盗链图片

发布时间:2009年06月09日      浏览次数:1193 次
<?
/* ---------------------------------------------------------------------------
PHP调用显示图片,图片格式可为:jpg、gif、bmp、png等
本程序作用与目的:隐藏服务器图片存放路径,防止盗链图片
作者:Leo Email:admin_5@126.com

调用示例:
显示本地图片:<img src="img.php?src=test.jpg" border="0" />
显示远程图片:<img src="img.php?src=http://www.***.com/logo.gif" border="0" />
--------------------------------------------------------------------------- */
$this_images_folder = "images/"; //初始化本地图片所在文件夹路径
$allow_execute = check_web(); //检查请求URL是否为本站域名
$src = trim($_GET["src"]); //获取要显示的图片路径
//如果非本站域名,则禁止输出图片,并显示默认的图片
if ( !$allow_execute or $src == "" ){
      no_img();
      exit;
}
if ( check_img($src) ){
      //如果是本地图片
      $img_url = $this_images_folder.$src;
      if ( file_exists($img_url) ){
            view_img($img_url); //输出显示
      }else{
            no_img();
      }
}else{
      //如果是远程图片
      $img_url = $src;
      view_img_http($img_url); //输出显示
}
//---------------------------------------------------------------------------
// 相关函数
//---------------------------------------------------------------------------
//读取并输出本地图片数据流
function view_img($img){
      header("Content-type: image/jpeg",true);
      $image = fread(@fopen($img,r),filesize($img));
      echo $image;
}
//读取并输出远程 HTTP 图片数据流
function view_img_http($img){
      header("Content-type: image/jpeg",true);
      ob_start();
      readfile($img);
      $image = ob_get_contents();
      ob_end_clean();
      echo $image;
}
//判断调用图片的网站是否属于本站域名,如果不属于,则返回False
function check_web(){
      $this_server_name = $_SERVER['SERVER_NAME'];//获取当前的域名
      $this_http_referer = $_SERVER["HTTP_REFERER"];//获取来源网址,即点击来到本页的上页网址
      $cmp_result = str_replace($this_server_name,"",$this_http_referer); //查找替换当前网站域名
      //比较,如果结果相同,则表示非本服务器域名,反之,为本服务器域名
      return ( $this_http_referer == $cmp_result ) ? false : true ;
}
//判断图片路径是本地还是远程,如果是本地,则返回True
function check_img($src){
      $cmp_result = str_replace("http://","",strtolower($src));
      return ( $src == $cmp_result ) ? true : false ;
}
//无图片时所显示的默认图片
function no_img( $no_img_src = "" ){
      if ( trim($no_img_src) == "" ) $no_img_src = "images/no_img.jpg"; //设定默认的无图片路径
      view_img($no_img_src);
}
?>
文章来源:桂林唯创网络
免责声明:本站相关技术文章信息部分来自网络,目的主要是传播更多信息,如果您认为本站的某些信息侵犯了您的版权,请与我们联系,我们会即时妥善的处理,谢谢合作!