php防盗链几种代码
先来看个最简单的
下面是php实现的代码, xxx.mp3就是你的音乐文件的实际地址, 对外传播的时候只传播php地址,mp3地址对外不公开
代码如下 | 复制代码 |
<?php if(strpos($_SERVER['HTTP_REFERER'], 'qq.com') !== FALSE) { header('HTTP/1.1 404 Not Found'); exit; } readfile('xxx.mp3'); ?> |
可以加入白名单的做法
代码如下 | 复制代码 |
<?php /** * @author seraphim * @copyright 2012 */ $ADMIN = array( 'defaulturl'=> 'http://www.xx.com/images/banner-header.gif', //盗链返回的地址 'url_1' => 'http://www.xx.net/file', 'url_2' => 'http://www.xx.net/file1', ); $okaysites = array( 'http://box.baidu.com', 'http://tieba.baidu.com/p/1493336008', //白名单 'http://www.xx.com/1.html', ); $reffer = $_SERVER['HTTP_REFERER']; if ($reffer) { $yes = 0; while (list($domain, $subarray) = each($okaysites)) { if (ereg($subarray, "$reffer")) { $yes = 1; } } $theu = 'url_' . $_GET['site']; $file = $_GET['file']; if ($ADMIN[$theu] and $yes == 1) { header("Location: $ADMIN[$theu]/$file"); } else { header("Location: $ADMIN[defaulturl]"); } } else { header("Location: $ADMIN[defaulturl]"); } print_r($_SERVER['HTTP_REFERER']); ?> |
实例3 [支持白名单二]
代码如下 | 复制代码 |
<?php $ADMIN[defaulturl] = "http://www.111cn.net/404.htm";//盗链返回的地址 $reffer = $HTTP_REFERER; ?> |
还有很多的方法来实现防盗链本文章只讲到了利用php实现,像有些站生成了html这样做起来就不怎么方便了,我们可以在iis,apache,htaccess来操作。
本文章这里是一个己排序好的二维数据,我们要向数组中插入一个元素这个保存到数据中后还需要进行排序的哦。代码如下 | 复制代码 |
<?php |
在数组中插入元素的方法有很多,这里只介绍了一种,有需要了解更多的朋友可到本站搜索。
本文章来介绍一篇关于标签云的生活方法,我们利用php和mysql做实现,有需要的同学可参考一下。用户输入文本和输入的文本在过去的一个标签云 。标签云是一个用户生成的标签的可视化描述,或只是一个网站的文字内容,通常用来描述网站的内容。
为此,我们将创建一个HTML表格,将接受用户文本,也让用户可以看到从 MySQL数据库,其中包含在过去输入的文本生成的标签云。
代码如下 | 复制代码 |
<?php echo '<form method="post" action="tag_cloud_gen.php" name="gen_tag_db">'; echo '<p>Input your text here:<br /><textarea name="tag_input" rows="20" cols="80"></textarea></p>'; echo '<input type="submit" name="submit">'; echo '</form>'; ?> <br /> <h3>OR</h3> <br /> <p>see the current tag cloud here</p> <?php echo '<form name="show_tag_cloud" method="post" action="show_tag_cloud.php">'; echo '<input type="submit" value="show current tag cloud" >'; echo '</form>'; ?> |
其中每个计算其频率和对将进入一个数组,输入的文本将被表征为单个词。然后将这个数组存储到一个MySQL数据库,我们可以选择保存在MySQL数据库表coloumn存储任何链接,如果这个项目未来的扩展。
1) tag_id —- int,primary key,auto increament 1)tag_id - 整型,主键,自动increament
2) keyword — varchar(20),unique 2)关键字 - 数据类型为varchar(20),独特的
3) weight — int 3)重量 - 诠释
4) link — varchar(256). 4)链接 - 为varchar(256)。
代码如下 | 复制代码 |
<?php $string=$_POST['tag_input']; $query="select * from `tagcloud_db`.`tags` where keyword like '%$keyword%'"; if(!$resultset){ |
Make anether file and name it style.css .做出anether文件和将其命名为style.css文件。 Put the following code in it.把下面的代码。
代码如下 | 复制代码 |
HTML, BODY |
这将使我们的标签云外观漂亮,它保存为style.css的。
再次,使一个新的PHP文件,并命名它show_tag_cloud.php。
在PHP代码中,如下我们连接到MySQL数据库,获取所有的标签,其重量和纽带。
然后计算每个使用它的重量及最小的标签大小假定为标签的大小,它也是每一个标签从数据库中检索或与Google链接,如果没有链接存在,即“不适用”的链接
代码如下 | 复制代码 |
<?php if($resultset=mysql_query($query,$connection)){ // Smallest font size possible // Tag Separator ?> |
现在把他们所有在您的Web服务器的根目录,并观看结果。 每个查询会给你新的结果,随着时间的推移,数据库的增长。
在php中分页相对来说很是简单的,我们只要理解到几点就好如pagesize,count,page这几个变量,总体多少页,当前是第几页,第页要显示几条记录,我们只要一个公式可以算出来。只需要得到两个变量就成功了一半:
每页要显示的记录数$pageSize
表中总的数据量 $rowCount
有了以上两个变量,我们就可以得出 共有几页了$pageCount
然后通过for循环,比如总共有13个页面,那么很容易就能通过for循环输出页数
代码如下 | 复制代码 |
$nav='';//用来保存页数的一个变量 for ($i=1;$i<=13;$i++) { $nav.="<a href='index.php?page=".$i."'>第".$i."页</a> "; } |
以上的for循环将输出如
第1页,第2页,第3页,第4页,第5页,第6页,第7页,第8页,第9页,第10页,第11页,第12页,第13页
如果我们只想每次只显示十个页面呢?比如1-10页,11-20页
很简单,只要稍微修改下for循环即可实现
代码如下 | 复制代码 |
$step= floor(($pageNow-1)/10)*10+1; for ($i=$step;$i<=$step+10;$i++) { $nav.="<a href='index.php?page=".$i."'>第".$i."页</a> "; } |
比如,当前页面$pageNow如何在1~10之间的话,那么$step=0
当前页面$pageNow如何在11~20之间的话,那么$step=10
当前页面$pageNow如何在21~30之间的话,那么$step=20
参考具体的实现过程的代码,我们不难发现,for循环的第二个条件只需要加上10就可以实现每次只显示10也的情况了,我们将这一步分装在fenyePage类中的getLink()方法中
话又说回来,如何才能得到$pageSize和$rowCount两个变量的值呢?
$pageSize可以又程序员自己指定,$rowCount可以借助一个简单的执行sql语句的函数就能得到
代码如下 | 复制代码 |
<?php /** * $sql语句:①获取数据②获取总记录数 */ class fenyePage{ public $pageSize=5;//每页显示的数量-->程序员指定的 public $rowCount;//这是从数据库中获取的(形如SELECT COUNT(id) FROM TABLE)用来保存总共有多少条记录 public $pageNow;//通过$_GET['page']获取的,用来保存当前所在的页码 public $pageCount;//计算得到的,用来保存总共有多少页 public $res_arr;//用来保存要显示到页面的数据(比如保存SELECT * FROM TABLE LIMIT 0,10 检索的数据) public $nav;//显示第几页第几页的导航条 /** * 取得当前页面的超链接 * * @author 小飞 2012/5/30 */ public function getLink() { $this->nav=''; $this->pageCount=ceil(($this->rowCount/$this->pageSize)); $step= floor(($this->pageNow-1)/10)*10+1; if ($this->pageNow>10) { $this->nav.=" <a href='index.php?page=".($step-1)."'> << </a> ";//整体每10页向前翻 } if ($this->pageNow!=1) { $this->nav.="<a href='index.php?page=".($this->pageNow-1)."'> 上一页</a> "; } if ($this->pageNow!=1) { $this->nav.="<a href='index.php?page=1'>首页</a> "; } for ($start=$step;$start<$step+10 && $start<=$this->pageCount;$start++) { $this->nav.="<a href='index.php?page=".$start."'>".$start."</a> "; } if ($this->pageNow!=$this->pageCount) { $this->nav.="<a href='index.php?page=".$this->pageCount."'>末页</a> "; } if ($this->pageNow!=$this->pageCount) { $this->nav.=" <a href='index.php?page=".($this->pageNow+1)."'>下一页</a>"; } if ($this->pageCount>10 && $this->pageNow<$this->pageCount-8){ $this->nav.=" <a href='index.php?page=".($step+10)."'> >> </a>";//整体每10页向后翻 } $this->nav.="/共有".$this->pageCount."页"; } } ?> |
由于zf中操作数据库的任务由model层来完成,所以,我将获取$rowCount的值的函数放在了对应的表model中
比如:我是操作order表的
那么当我要显示所有订单信息的时候,我通过order类中的showorder()方法取得$rowCount的值,并将其付给分页类中的$rowCount属性
同样,将要显示在页面上的数据信息也一并付给了分页类中的$res_arr属性
这样,我们就可以很容易的通过实例化一个分页类(fenyePage),然后将其通过参数传给showorder()函数,由该函数完成以下动作:
①要显示在页面上的信息
②表中总共有多少条记录
代码如下 | 复制代码 |
/** * 根据指定的用户id,查询该用户的历史订餐记录 * * @author 小飞 2012/5/30 * @param $id 用户id * @param $fenye 实例化的一个对象,用来处理分页 * @todo $sql1语句 "select * from table where * limit 0,10" 该sql语句主要用来检索数据库中的数据,用以显示在view层 * @todo $sql2语句 "select count(id) from table" 该sql语句用来得出总的数据量 */ public function showorder($id=null,$fenye=null) { $db = $this->getAdapter(); $select=$db->select(); $select->from(array('o' => 'order'),array('o.id','o.user_id','o.user_name','o.food_name','o.food_price','o.order_time','o.order_state')); if ($id!=null){ $select->where('o.user_id=?',$id); } $select->join(array('d'=>'department'),'o.dep_id = d.id','d.dep_name'); if($fenye!=null){ $select->limit($fenye->pageSize,($fenye->pageNow-1)*$fenye->pageSize); } $sql1=$select->__toString(); //该sql语句主要用来计算总的数据量 $sql2="SELECT COUNT(id) FROM `order`"; $fenye->res_arr=$db->fetchAll($sql1);//将要显示的数据存储到分页类的$res_arr属性当中,方便调用 $rowCount=$db->fetchAll($sql2);//将表中的总数据量保存到分页类的rowCount属性当中 $fenye->rowCount=$rowCount[0]['COUNT(id)']; $fenye->getLink(); return $fenye->res_arr; } |
总结分页最核心的几句代码
代码如下 | 复制代码 |
$this->pageCount=ceil(($this->rowCount/$this->pageSize)); $step= floor(($this->pageNow-1)/10)*10+1; |
再就是sql中的select * from table where * limit 0,10也就是本实例中的$select->limit($fenye->pageSize,($fenye->pageNow-1)*$fenye->pageSize); 了。
文章利用了第三方接口来实现ip地址查询,这里根据用户提交的IP地址就可以方便的查出IP地址真实所在地。代码如下 | 复制代码 |
<?php header("content-Type: text/html; charset=utf-8");$weburl=$_SERVER['SERVER_NAME'];$weblink="http://".$weburl."/";if(count($_GET)>0){$urlip=array_keys($_GET);$urlip=str_replace("_",".",$urlip[0]);}?> <style type="text/css"> <SCRIPT LANGUAGE="JavaScript">function checkIP(){var ipArray,ip,j;ip = document.ipform.ip.value;if(/[A-Za-z_-]/.test(ip)){if(!/^([w-]+.)+((com)|(net)|(org)|(gov.cn)|(info)|(cc)|(com.cn)|(com.hk)|(net.cn)|(org.cn)|(com.ru)|(net.ru)|(org.ru)|(name)|(biz)|(hk)|(vn)|(com.sg)|(pk)|(ph)|(ac)|(bz)|(de)|(net.au)|(my)|(tv)|(us)|(jp)|(kr)|(sg)|(mn)|(cd)|(ue)|(sh)|(lc)|(hn)|(me)|(la)|(cc)|(tk)|(com.tw)|(cm)|(cn))$/.test(ip)){alert("不是正确的域名,请检查域名格式或看是否有空格"); document.ipform.ip.focus();return false;}}else{ipArray = ip.split(".");j = ipArray.length;if(j!=4){alert("不是正确的IP");document.ipform.ip.focus();return false;}for(var i=0;i<4;i++){if(ipArray[i].length==0 || ipArray[i]>255){alert("不是正确的IP");document.ipform.ip.focus();return false;}}}} |
淘宝IP地址库接口说明
1. 请求接口(GET):
http://ip.taobao.com/service/getIpInfo.php?ip=[ip地址字串]
2. 响应信息:
(json格式的)国家 、省(自治区或直辖市)、市(县)、运营商
3. 返回数据格式:
代码如下 | 复制代码 |
{"code":0,"data":{"ip":"210.75.225.254","country":"u4e2du56fd","area":"u534eu5317", "region":"u5317u4eacu5e02","city":"u5317u4eacu5e02","county":"","isp":"u7535u4fe1", "country_id":"86","area_id":"100000","region_id":"110000","city_id":"110000", "county_id":"-1","isp_id":"100017"}} |
其中code的值的含义为,0:成功,1:失败。
.htaccess 通用版伪静态规则 其它规则请参考下面的进行修改
代码如下 | 复制代码 |
RewriteEngine on RewriteRule ^(.*)$ index.php?id=$1 [L] |
sina SAE专版伪静态配置规则
代码如下 | 复制代码 |
- rewrite: if (!is_dir() && !is_file() && path ~ "/(.*)" ) goto "index.php?$1" |
相关文章
- 有一种方法,可以不打开网站而直接查看到这个网站的源代码.. 这样可以有效地防止误入恶意网站... 在浏览器地址栏输入: view-source:http://...2016-09-20
- <?php require('path.inc.php'); header('content-Type: text/html; charset=utf-8'); $borough_id = intval($_GET['id']); if(!$borough_id){ echo ' ...2016-11-25
- 本文实例讲述了JS基于Mootools实现的个性菜单效果代码。分享给大家供大家参考,具体如下:这里演示基于Mootools做的带动画的垂直型菜单,是一个初学者写的,用来学习Mootools的使用有帮助,下载时请注意要将外部引用的mootools...2015-10-23
- 本文实例讲述了JS+CSS实现分类动态选择及移动功能效果代码。分享给大家供大家参考,具体如下:这是一个类似选项卡功能的选择插件,与普通的TAb区别是加入了动画效果,多用于商品类网站,用作商品分类功能,不过其它网站也可以用,...2015-10-21
- 本文实例讲述了JS实现自定义简单网页软键盘效果。分享给大家供大家参考,具体如下:这是一款自定义的简单点的网页软键盘,没有使用任何控件,仅是为了练习JavaScript编写水平,安全性方面没有过多考虑,有顾虑的可以不用,目的是学...2015-11-08
- php 取除连续空格与换行代码,这些我们都用到str_replace与正则函数 第一种: $content=str_replace("n","",$content); echo $content; 第二种: $content=preg_replac...2016-11-25
- php简单用户登陆程序代码 这些教程很对初学者来讲是很有用的哦,这款就下面这一点点代码了哦。 <center> <p> </p> <p> </p> <form name="form1...2016-11-25
- 公司一些wordpress网站由于下载的插件存在恶意代码,导致整个服务器所有网站PHP文件都存在恶意代码,就写了个简单的脚本清除。恶意代码示例...2015-10-23
- 本文实例讲述了JS实现双击屏幕滚动效果代码。分享给大家供大家参考,具体如下:这里演示双击滚屏效果代码的实现方法,不知道有觉得有用处的没,现在网上还有很多还在用这个特效的呢,代码分享给大家吧。运行效果截图如下:在线演...2015-10-30
- 其实挺简单的就是if(navigator.userAgent.indexOf('UCBrowser') > -1) {alert("uc浏览器");}else{//不是uc浏览器执行的操作}如果想测试某个浏览器的特征可以通过如下方法获取JS获取浏览器信息 浏览器代码名称:navigator...2015-11-08
- 一、日期减去天数等于第二个日期function cc(dd,dadd){//可以加上错误处理var a = new Date(dd)a = a.valueOf()a = a - dadd * 24 * 60 * 60 * 1000a = new Date(a)alert(a.getFullYear() + "年" + (a.getMonth() +...2015-11-08
- 微信支付,即便交了保证金,你还是处理测试阶段,不能正式发布。必须到你通过程序测试提交订单、发货通知等数据到微信的系统中,才能申请发布。然后,因为在微信中是通过JS方式调用API,必须在微信后台设置支付授权目录,而且要到...2014-05-31
- 本文实例讲述了PHP常用的小程序代码段。分享给大家供大家参考,具体如下:1.计算两个时间的相差几天$startdate=strtotime("2009-12-09");$enddate=strtotime("2009-12-05");上面的php时间日期函数strtotime已经把字符串...2015-11-24
- 小编分享了一段简单的php中文转拼音的实现代码,代码简单易懂,适合初学php的同学参考学习。 代码如下 复制代码 <?phpfunction Pinyin($_String...2017-07-06
php导出csv格式数据并将数字转换成文本的思路以及代码分享
php导出csv格式数据实现:先定义一个字符串 存储内容,例如 $exportdata = '规则111,规则222,审222,规222,服2222,规则1,规则2,规则3,匹配字符,设置时间,有效期'."/n";然后对需要保存csv的数组进行foreach循环,例如复制代...2014-06-07- ecshop商品无限级分类代码 function cat_options($spec_cat_id, $arr) { static $cat_options = array(); if (isset($cat_options[$spec_cat_id]))...2016-11-25
- 本文介绍了如何延迟javascript代码的加载,加快网页的访问速度。 当一个网站有很多js代码要加载,js代码放置的位置在一定程度上将会影像网页的加载速度,为了让我们的网页加载速度更快,本文总结了一下几个注意点...2013-10-13
- 这篇文章主要介绍了vue项目,代码提交至码云,iconfont的用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-07-30
- 这篇文章主要介绍了IDEA插件之快速删除Java代码中的注释,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-02-18
- 这篇文章主要介绍了C#超实用代码段合集,涉及C#针对图标、数学运算、拼音、日期、时间及文件夹等的相关操作技巧,需要的朋友可以参考下...2020-06-25