PHP禁止图片文件的被盗链函数

 更新时间:2016年11月25日 16:11  点击:2145

1、假设充许连结图片的主机域名为:www.111cn.net

2、修改httpd.conf

 SetEnvIfNoCase Referer "^http://www.111cn.net/" local_ref=1
<FilesMatch ".(gif|jpg)">
Order Allow,Deny
Allow from env=local_ref
</FilesMatch> 
 
这个简单的应用不光可以解决图片盗链的问题,稍加修改还可以防止任意文件盗链下载的问题。

使用以上的方法当从非指定的主机连结图片时,图片将无法显示,如果希望显示一张“禁止盗链”的图片,我们可以用mod_rewrite 来实现。

首先在安装 apache 时要加上 --enable-rewrite 参数加载 mod_rewrite 模组。

假设“禁止盗链”的图片为abc.gif,我们在 httpd.conf 中可以这样配置:

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www.)?111cn.net /.*$ [NC]
RewriteRule .(gif|jpg)$ /XrssFile/2008-4/1/20084111376430.gif [R,L] 
 
当主机的图片被盗链时,只会看到 abc.gif 这张“禁止盗链”的图片!

一段防盗连的PHP代码

<?php
$ADMIN[defaulturl] = "http://www.163.com/404.htm";//盗链返回的地址
$okaysites = array("http://www.163.com/","http://163.com"); //白名单
$ADMIN[url_1] = "http://www.163.com/download/";//下载地点1
$ADMIN[url_2] = "";//下载地点2,以此类推
$reffer = $HTTP_REFERER;
if($reffer) {
$yes = 0;
while(list($domain, $subarray) = each($okaysites)) {
if (ereg($subarray,"$reffer")) {
$yes = 1;
}
}
$theu = "url"."_"."$site";
if ($ADMIN[$theu] AND $yes == 1) {
header("Location: $ADMIN[$theu]/$file");
} else {
header("Location: $ADMIN[defaulturl]");
}
} else {
header("Location: $ADMIN[defaulturl]");
}
?>

使用方法:将上述代码保存为dao4.php

 

 

 

<
最近在做一个项目的时候发现,在php中,如果要对一个数据的某个元素进行赋值的时候,就会报错如:

<?php
$str="222222";
$var=array(
         a
=>"1",
         b
=>$str,
         c
=>""
);
if($var[b]){
       
$var[c]=$var[b];
}
?> 
会提示出错,说明未定义常量。
这种情况有俩个方法可以解决,一就是更改php.ini的配置
修改php.ini,把error_reporting        =        E_ALL改成
error_reporting        =        E_ALL    &    ~E_NOTICE
如果这种不能解决的话,
就把

 替换成


 


<

一个简单的实例:
新闻模版文件news_tmp.html:
<html>
<head>
<title>{title}</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body>
<TABLE border=0 width=767 cellspacing="0" cellpadding="5">
  <TR>
 <TD>
      <div align="center">{news_title}</div>
    </TD>
</TR>
<TR>
 <TD>
      <div align="center">{news_image}</div>
    </TD>

</TR>
<TR>
 <TD>{news_content}</TD>
</TR>
</TABLE>
</body>
</html>
______________________________________________________________________________________________
答7:
新闻生成文件aaa.php:
<?
//假设下面信息都来自表单
$title="娱乐新闻---郑秀文准备宣布退出娱乐圈";
$news_title="郑秀文准备宣布退出娱乐圈";
$image_path=array("image/xxx.jpg","image/xxx2.jpg","image/xxx3.jpg");
$news_content="事业如日方中的郑秀文(Sammi),除是乐坛天后外,亦以五百五十万片酬登上全港片酬最高女星之位......";
$fp=@fopen("news_tmp.html","r") or die("没有模版文件或者没有相关权限!");

$str=fread($fp,filesize("news_tmp.html"));
fclose($fp);


______________________________________________________________________________________________
答8:
$news_filename=time().".html"; //生成的新闻文件名
$str=str_replace("{title}",$title,$str);
$str=str_replace("{news_title}",$news_title,$str);
$str=str_replace("{news_content}",$news_content,$str);
if(count($image_path)){
 for($n=0;$n<count($image_path);$n++)
  $news_image.="<img src=".$image_path[$n]."><BR>";
 $str=str_replace("{news_image}",$news_image,$str);
}else
 $str=str_replace("{news_image}","",$str);
$fw=fopen($news_filename,"w");
fwrite($fw,$str);
?>

 

 

<


$file_dir=$totalDirectory;
     $file_name=$filename;
     //echo ''./db/''.$file_dir.$file_name;
    if (file_exists($file_dir.$file_name)){
          $file=fopen($file_dir.$file_name,''r'');
         Header(''Content-type:application/octet-stream'');
         Header(''Accept-Ranges:bytes'');
         Header(''Content-Disposition:attachment;filename=''.$file_name);
         echo fread($file,filesize($file_dir.$file_name));
         fclose($file);
         exit;
        
     }else{
         echo ''file is not exists'';
     }





数字验证码



 <? 
   
/* 
    *   Filename: authpage.php 
    
*/ 
session_start();
     
//   srand((double)microtime()*1000000); 
        $authnum = $_SESSION[''authnum''];
        
//验证用户输入是否和验证码一致 
        if(isset($_POST[''authinput'']))  
        { 
                
if(strcmp($_POST[''authinput''],$_SESSION[''authnum''])==0
                        
echo "验证成功!"
                
else 
                        
echo "验证失败!"
        } 
    
        
//生成新的四位整数验证码 

    //    while(($authnum=rand()%10000)<1000);  

    ?> 
        
<form action=test4.php method=post> 
        
<table> 
                请输入验证码:
<input type=text name=authinput style="width: 80px"><br> 
                
<input type=submit name="验证" value="提交验证码"> 
                
<input type=hidden name=authnum value=<? echo $authnum?>> 
                
<img src=authimg.php?authnum=<? echo $authnum?>> 
        
</table> 
        
</form> 

 

 

 authimg.php



<?php 
//生成验证码图片 
Header("Content-type: image/PNG");  
srand((double)microtime()*1000000);//播下一个生成随机数字的种子,以方便下面随机数生成的使用

session_start();//将随机数存入session中
$_SESSION[''authnum'']="";
$im = imagecreate(62,20); //制定图片背景大小

$black = ImageColorAllocate($im, 0,0,0); //设定三种颜色
$white = ImageColorAllocate($im, 255,255,255); 
$gray = ImageColorAllocate($im, 200,200,200); 

imagefill(
$im,0,0,$gray); //采用区域填充法,设定(0,0)

while(($authnum=rand()%100000)<10000);
//将四位整数验证码绘入图片 
$_SESSION[''authnum'']=$authnum;
imagestring(
$im, 5, 10, 3, $authnum, $black);
// 用 col 颜色将字符串 s 画到 image 所代表的图像的 x,y 座标处像的左上角为 0, 0)。
//如果 font 是 1,2,3,4 或 5,则使用内置字体


for($i=0;$i<200;$i++)    //加入干扰象素 

     
$randcolor = ImageColorallocate($im,rand(0,255),rand(0,255),rand(0,255));
     imagesetpixel(
$im, rand()%70 , rand()%30 , $randcolor); 
}
ImagePNG(
$im); 
ImageDestroy(
$im); 
?>


<
[!--infotagslink--]

相关文章

  • php读取zip文件(删除文件,提取文件,增加文件)实例

    下面小编来给大家演示几个php操作zip文件的实例,我们可以读取zip包中指定文件与删除zip包中指定文件,下面来给大这介绍一下。 从zip压缩文件中提取文件 代...2016-11-25
  • php正确禁用eval函数与误区介绍

    eval函数在php中是一个函数并不是系统组件函数,我们在php.ini中的disable_functions是无法禁止它的,因这他不是一个php_function哦。 eval()针对php安全来说具有很...2016-11-25
  • php中eval()函数操作数组的方法

    在php中eval是一个函数并且不能直接禁用了,但eval函数又相当的危险了经常会出现一些问题了,今天我们就一起来看看eval函数对数组的操作 例子, <?php $data="array...2016-11-25
  • 使用PHP+JavaScript将HTML页面转换为图片的实例分享

    这篇文章主要介绍了使用PHP+JavaScript将HTML元素转换为图片的实例分享,文后结果的截图只能体现出替换的字体,也不能说将静态页面转为图片可以加快加载,只是这种做法比较interesting XD需要的朋友可以参考下...2016-04-19
  • Python astype(np.float)函数使用方法解析

    这篇文章主要介绍了Python astype(np.float)函数使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-06-08
  • Jupyter Notebook读取csv文件出现的问题及解决

    这篇文章主要介绍了JupyterNotebook读取csv文件出现的问题及解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2023-01-06
  • C#从数据库读取图片并保存的两种方法

    这篇文章主要介绍了C#从数据库读取图片并保存的方法,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下...2021-01-16
  • Photoshop古装美女图片转为工笔画效果制作教程

    今天小编在这里就来给各位Photoshop的这一款软件的使用者们来说说把古装美女图片转为细腻的工笔画效果的制作教程,各位想知道方法的使用者们,那么下面就快来跟着小编一...2016-09-14
  • Python 图片转数组,二进制互转操作

    这篇文章主要介绍了Python 图片转数组,二进制互转操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-09
  • Python中的imread()函数用法说明

    这篇文章主要介绍了Python中的imread()函数用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-16
  • php抓取网站图片并保存的实现方法

    php如何实现抓取网页图片,相较于手动的粘贴复制,使用小程序要方便快捷多了,喜欢编程的人总会喜欢制作一些简单有用的小软件,最近就参考了网上一个php抓取图片代码,封装了一个php远程抓取图片的类,测试了一下,效果还不错分享...2015-10-30
  • C# 中如何取绝对值函数

    本文主要介绍了C# 中取绝对值的函数。具有很好的参考价值。下面跟着小编一起来看下吧...2020-06-25
  • C#学习笔记- 随机函数Random()的用法详解

    下面小编就为大家带来一篇C#学习笔记- 随机函数Random()的用法详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25
  • Photoshop打开PSD文件空白怎么解决

    有时我们接受或下载到的PSD文件打开是空白的,那么我们要如何来解决这个 问题了,下面一聚教程小伙伴就为各位介绍Photoshop打开PSD文件空白解决办法。 1、如我们打开...2016-09-14
  • C#操作本地文件及保存文件到数据库的基本方法总结

    C#使用System.IO中的文件操作方法在Windows系统中处理本地文件相当顺手,这里我们还总结了在Oracle中保存文件的方法,嗯,接下来就来看看整理的C#操作本地文件及保存文件到数据库的基本方法总结...2020-06-25
  • 解决python 使用openpyxl读写大文件的坑

    这篇文章主要介绍了解决python 使用openpyxl读写大文件的坑,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-13
  • C#实现HTTP下载文件的方法

    这篇文章主要介绍了C#实现HTTP下载文件的方法,包括了HTTP通信的创建、本地文件的写入等,非常具有实用价值,需要的朋友可以参考下...2020-06-25
  • jquery左右滚动焦点图banner图片鼠标经过显示上下页按钮

    jquery左右滚动焦点图banner图片鼠标经过显示上下页按钮...2013-10-13
  • SpringBoot实现excel文件生成和下载

    这篇文章主要为大家详细介绍了SpringBoot实现excel文件生成和下载,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-02-09
  • 利用JS实现点击按钮后图片自动切换的简单方法

    下面小编就为大家带来一篇利用JS实现点击按钮后图片自动切换的简单方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2016-10-25