php 根据IP显示地区代码

 更新时间:2016年11月25日 16:02  点击:1399
php 根据IP显示地区代码


<?php
define('IPDATA_MINI', PHPCMS_ROOT.'include/ipdata/mini.Dat');
define('IPDATA_FULL', PHPCMS_ROOT.'include/ipdata/QQWry.Dat');

class ip_area
{
 var $fp = NULL;
 var $func;
 var $offset;
 var $index;

 function ip_area()
 {
  if(@file_exists(IPDATA_MINI))
  {
   $this->func = 'data_mini';
   $this->fp = @fopen(IPDATA_MINI, 'rb');
   $this->offset = unpack('Nlen', fread($this->fp, 4));
   $this->index  = fread($this->fp, $this->offset['len'] - 4);
  }
  elseif(@file_exists(IPDATA_FULL))
  {
   $this->func = 'data_full';
   $this->fp = @fopen(IPDATA_FULL, 'rb');
  }
 }

 function get($ip)
 {
  $return = '';
  if(preg_match("/^d{1,3}.d{1,3}.d{1,3}.d{1,3}$/", $ip))
  {
   $iparray = explode('.', $ip);
   if($iparray[0] == 10 || $iparray[0] == 127 || ($iparray[0] == 192 && $iparray[1] == 168) || ($iparray[0] == 172 && ($iparray[1] >= 16 && $iparray[1] <= 31)))
   {
    $return = 'LAN';
   }
   elseif($iparray[0] > 255 || $iparray[1] > 255 || $iparray[2] > 255 || $iparray[3] > 255)
   {
    $return = 'Invalid IP Address';
   }
   else
   {
    $return = $this->func ? $this->{$this->func}($ip) : '';
    if(strpos($return, ' ') !== false) $return = substr($return, 0, strpos($return,' '));
   }
   if(strtolower(CHARSET) == 'utf-8') $return = iconv('gbk', 'utf-8', $return);
  }
  return $return;
 }

 function data_mini($ip)
 {
  $ipdot = explode('.', $ip);
  $ipdot[0] = (int)$ipdot[0];
  $ipdot[1] = (int)$ipdot[1];
  $ip    = pack('N', ip2long($ip));
  $length = $this->offset['len'] - 1028;
  $start  = unpack('Vlen', $this->index[$ipdot[0] * 4] . $this->index[$ipdot[0] * 4 + 1] . $this->index[$ipdot[0] * 4 + 2] . $this->index[$ipdot[0] * 4 + 3]);
  for($start = $start['len'] * 8 + 1024; $start < $length; $start += 8)
  {
   if($this->index{$start} . $this->index{$start + 1} . $this->index{$start + 2} . $this->index{$start + 3} >= $ip)
   {
    $this->index_offset = unpack('Vlen', $this->index{$start + 4} . $this->index{$start + 5} . $this->index{$start + 6} . "x0");
    $this->index_length = unpack('Clen', $this->index{$start + 7});
    break;
   }
  }
  fseek($this->fp, $this->offset['len'] + $this->index_offset['len'] - 1024);
  if($this->index_length['len'])
  {
   return str_replace('- ', '', fread($this->fp, $this->index_length['len']));
  }
  else
  {
   return 'Unknown';
  }
 }

 function data_full($ip)
 {
  rewind($this->fp);
  $ip = explode('.', $ip);
  $ipNum = $ip[0] * 16777216 + $ip[1] * 65536 + $ip[2] * 256 + $ip[3];
  if(!($DataBegin = fread($this->fp, 4)) || !($DataEnd = fread($this->fp, 4)) ) return;
  @$ipbegin = implode('', unpack('L', $DataBegin));
  if($ipbegin < 0) $ipbegin += pow(2, 32);
  @$ipend = implode('', unpack('L', $DataEnd));
  if($ipend < 0) $ipend += pow(2, 32);
  $ipAllNum = ($ipend - $ipbegin) / 7 + 1;
  $BeginNum = $ip2num = $ip1num = 0;
  $ipAddr1 = $ipAddr2 = '';
  $EndNum = $ipAllNum;
  while($ip1num > $ipNum || $ip2num < $ipNum)
  {
   $Middle= intval(($EndNum + $BeginNum) / 2);
   fseek($this->fp, $ipbegin + 7 * $Middle);
   $ipData1 = fread($this->fp, 4);
   if(strlen($ipData1) < 4)
   {
    fclose($this->fp);
    return 'System Error';
   }
   $ip1num = implode('', unpack('L', $ipData1));
   if($ip1num < 0) $ip1num += pow(2, 32);
   if($ip1num > $ipNum)
   {
    $EndNum = $Middle;
    continue;
   }
   $DataSeek = fread($this->fp, 3);
   if(strlen($DataSeek) < 3)
   {
    fclose($this->fp);
    return 'System Error';
   }
   $DataSeek = implode('', unpack('L', $DataSeek.chr(0)));
   fseek($this->fp, $DataSeek);
   $ipData2 = fread($this->fp, 4);
   if(strlen($ipData2) < 4)
   {
    fclose($this->fp);
    return 'System Error';
   }
   $ip2num = implode('', unpack('L', $ipData2));
   if($ip2num < 0) $ip2num += pow(2, 32);
   if($ip2num < $ipNum)
   {
    if($Middle == $BeginNum)
    {
     fclose($this->fp);
     return 'Unknown';
    }
    $BeginNum = $Middle;
   }
  }
  $ipFlag = fread($this->fp, 1);
  if($ipFlag == chr(1))
  {
   $ipSeek = fread($this->fp, 3);
   if(strlen($ipSeek) < 3)
   {
    fclose($this->fp);
    return 'System Error';
   }
   $ipSeek = implode('', unpack('L', $ipSeek.chr(0)));
   fseek($this->fp, $ipSeek);
   $ipFlag = fread($this->fp, 1);
  }
  if($ipFlag == chr(2))
  {
   $AddrSeek = fread($this->fp, 3);
   if(strlen($AddrSeek) < 3)
   {
    fclose($this->fp);
    return 'System Error';
   }
   $ipFlag = fread($this->fp, 1);
   if($ipFlag == chr(2)) {
    $AddrSeek2 = fread($this->fp, 3);
    if(strlen($AddrSeek2) < 3)
    {
     fclose($this->fp);
     return 'System Error';
    }
    $AddrSeek2 = implode('', unpack('L', $AddrSeek2.chr(0)));
    fseek($this->fp, $AddrSeek2);
   }
   else
   {
    fseek($this->fp, -1, SEEK_CUR);
   }
   while(($char = fread($this->fp, 1)) != chr(0))
   $ipAddr2 .= $char;
   $AddrSeek = implode('', unpack('L', $AddrSeek.chr(0)));
   fseek($this->fp, $AddrSeek);
   while(($char = fread($this->fp, 1)) != chr(0))
   $ipAddr1 .= $char;
  }
  else
  {
   fseek($this->fp, -1, SEEK_CUR);
   while(($char = fread($this->fp, 1)) != chr(0))
   $ipAddr1 .= $char;
   $ipFlag = fread($this->fp, 1);
   if($ipFlag == chr(2))
   {
    $AddrSeek2 = fread($this->fp, 3);
    if(strlen($AddrSeek2) < 3)
    {
     fclose($this->fp);
     return 'System Error';
    }
    $AddrSeek2 = implode('', unpack('L', $AddrSeek2.chr(0)));
    fseek($this->fp, $AddrSeek2);
   }
   else
   {
    fseek($this->fp, -1, SEEK_CUR);
   }
   while(($char = fread($this->fp, 1)) != chr(0))
   $ipAddr2 .= $char;
  }
  if(preg_match('/http/i', $ipAddr2)) $ipAddr2 = '';
  $ipaddr = "$ipAddr1 $ipAddr2";
  $ipaddr = preg_replace('/CZ88.NET/is', '', $ipaddr);
  $ipaddr = preg_replace('/^s*/is', '', $ipaddr);
  $ipaddr = preg_replace('/s*$/is', '', $ipaddr);
  if(preg_match('/http/i', $ipaddr) || $ipaddr == '') $ipaddr = 'Unknown';
  return ''.$ipaddr;
 }

 function close()
 {
  @fclose($this->fp);
 }
}
?>

php 经典的分页函数


/**
*分页函数
*
*
*/
function multi($total, $perPage, $curPage, $pageUrl, $maxPages = 0, $page = 10, $autoGoTo = TRUE, $simple = FALSE) {
 $multiPage = '';
 $pageUrl .= strpos($pageUrl, '?') ? '&amp;' : '?';
 $realPages = 1;
 if($total > $perPage) {
  $offset = 2;

  $realPages = @ceil($total / $perPage);
  $pages = $maxPages && $maxPages < $realPages ? $maxPages : $realPages;

  if($page > $pages) {
   $from = 1;
   $to = $pages;
  } else {
   $from = $curPage - $offset;
   $to = $from + $page - 1;
   if($from < 1) {
    $to = $curPage + 1 - $from;
    $from = 1;
    if($to - $from < $page) {
     $to = $page;
    }
   } elseif ($to > $pages) {
    $from = $pages - $page + 1;
    $to = $pages;
   }
  }

  $multiPage = ($curPage - $offset > 1 && $pages > $page ? '<a href="'.$pageUrl.'page=1" class="first"'.$ajaxtarget.'>1 ...</a>' : '').
   ($curPage > 1 && !$simple ? '<a href="'.$pageUrl.'page='.($curPage - 1).'" class="prev"'.$ajaxtarget.'>&lsaquo;&lsaquo;</a>' : '');
  for($i = $from; $i <= $to; $i++) {
   $multiPage .= $i == $curPage ? '<strong>'.$i.'</strong>' :
    '<a href="'.$pageUrl.'page='.$i.($ajaxtarget && $i == $pages && $autoGoTo ? '#' : '').'"'.$ajaxtarget.'>'.$i.'</a>';
  }

  $multiPage .= ($curPage < $pages && !$simple ? '<a href="'.$pageUrl.'page='.($curPage + 1).'" class="next"'.$ajaxtarget.'>&rsaquo;&rsaquo;</a>' : '').
   ($to < $pages ? '<a href="'.$pageUrl.'page='.$pages.'" class="last"'.$ajaxtarget.'>... '.$realPages.'</a>' : '').
   (!$simple && $pages > $page && !$ajaxtarget ? '<kbd><input type="text" name="custompage" size="3" onkeydown="if(event.keyCode==13) {window.location=''.$pageUrl.'page='+this.value; return false;}" /></kbd>' : '');

  $multiPage = $multiPage ? '<div class="pages">'.(!$simple ? '<em>&nbsp;'.$total.'&nbsp;</em>' : '').$multiPage.'</div>' : '';
 }
 $maxpage = $realPages;
 return $multiPage;
}

此函数只要传参数就可以有漂亮的分页效果哦,并且支持select下拉设置调转功能

仿dedecms顶评[顶,踩]功能源码下载

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>Digg Demo</title>
<style>
.buttons{margin:20px 12px 12px;text-align:center;}
.buttons img{margin:0 5px 0 0;}
.mark{padding:15px 0 0 40px;overflow:hidden;zoom:1;}
#mark0, #mark1{width:189px;height:48px;background:url('./img/mark.gif') no-repeat -189px 0;border:0px none;cursor:pointer;position:relative;margin:0;padding:0;overflow:hidden;float:left}
#mark1{background-position:-378px 0;margin-left:10px;}
.bar{position:absolute;left:9px;top:32px;width:55px;height:5px;border:1px solid #40a300;background-color:#fff;overflow:hidden;text-align:left;}
#mark1 .bar{border-color:#555;}
.bar div{background:url('./img/sprites.gif') repeat-x 0 -265px;height:5px;overflow:hidden}
#mark1 .bar div{background-position:0 -270px;}
#barnum1, #barnum2{position:absolute;top:30px;left:70px;font:400 10px/12px arial;color:#333;}
</style>
<script language="javascript" src="./digg.js"></script>

<script type="text/javascript">
var url ='http://127.0.0.1/digg/';

</script>
</head>
<body>
  <div class="mark">
   <div id="mark0" onmouseover="this.style.backgroundPosition='0 0'" onmouseout="this.style.backgroundPosition='-189px 0'" onfocus="this.blur()" onClick="sEval(1190,1)">
    <div class="bar"><div id="eimg1" style="width:50px"></div></div>
    <span id="barnum1"><span id="sp1">92.7%</span> (<span id="s1">18199</span>)</span>
   </div>
   <div id="mark1" onmouseover="this.style.backgroundPosition='-567px 0'" onmouseout="this.style.backgroundPosition='-378px 0'" onfocus="this.blur()" onclick="sEval(1190,2)">
    <div class="bar"><div id="eimg2" style="width:4px"></div></div>
    <span id="barnum2"><span id="sp2">7.3%</span> (<span id="s2">1431</span>)</span>
   </div>
  </div>

</body>
</html>

js代码

function $Obj(o){
 return document.getElementById(o);
}

var etag=false;
function sEval(softid,et){
 if(etag==true)
 {
  alert('您已经投过票了,感谢您的参与!');
  return;
 }
 var file=url +'digg.php?et='+et+'&id='+softid;
 var html_doc=document.getElementsByTagName('head')[0];
    var js=document.createElement('script');
    js.setAttribute('type', 'text/javascript');
    js.setAttribute('src', file);
 js.onreadystatechange=function(){
        if(js.readyState=='loaded'||js.readyState=='complete'){
            sEvalRes();
        }
    }
    js.onload=function(){
        sEvalRes();
    }
 html_doc.appendChild(js);
 etag=true;
}

function sEvalRes(){
 if(re[2]=='success'){
  var s=$Obj('s'+re[1]).innerHTML;
  $Obj('s'+re[1]).innerHTML=parseInt(s)+1;
  sUpdate();
  alert(re[3]);
 }
 else if(re[2]=='fail'){
  alert(re[3]);
  
 }
 else{
  alert('未知错误');
 }
}

function sUpdate(){
 var sUp=parseInt($Obj('s1').innerHTML);
 var sDown=parseInt($Obj("s2").innerHTML);
 var sTotal=sUp+sDown;
 var spUp=(sUp/sTotal)*100;
 spUp=Math.round(spUp*10)/10;
 var spDown=100-spUp;
 spDown=Math.round(spDown*10)/10;
 $Obj('sp1').innerHTML=spUp+'%';
 $Obj('sp2').innerHTML=spDown+'%';
 $Obj('eimg1').style.width = parseInt((sUp/sTotal)*55)+'px';
 $Obj('eimg2').style.width = parseInt((sDown/sTotal)*55)+'px';
}

php代码

<?php
$id =intval($id);
$et =intval($et);
if($_COOKIE['digg'.$id]=='' || empty($_COOKIE['digg'.$id]) ){
 setcookie("digg".$id, $id, time()+3600);  /* expire in 1 hour */
 //读写数据库操作部分省略
 echo "var re=new Array();re[0]=".$id.";re[1]=".$et.";re[2]="success";re[3]="投票成功!";";
}else{
 echo "var re=new Array();re[0]=".$id.";re[1]=".$et.";re[2]="fail";re[3]="嬲你的, php strrpos explode is_array 函数使用教程

    

本文章来讲一个简单的关于strrpos explode is_array等函数的使用方法哦,

关于strrpos判断
字符中是否存在要查的字符strrpos($j_rs->selectedjob,'-')


关于explode判断
把字符以什么形式开成数组array = explode('-',$j_rs->selectedjob);

is_array
判断当前参数是否是数组is_array( $array )

$ja ='0';
$jb ='0';
   
if(strrpos($j_rs->selectedjob,'-') )//用strrpos
 {
  $array = explode('-',$j_rs->selectedjob);
  if( is_array( $array ) )
  {
   $ja =getJobType( $array[0] );
   $jb =getJobType( $array[1] );
  }
   else
  {
   $ja =getJobType( $j_rs->selectedjob );
  }
   }
   else
   {
    $ja =getJobType( $j_rs->selectedjob );
   }

i
   

php in_array,trim,isset,unset,is_numeric函数用法。

下面我们一一看讲一下这些函数的使用教程吧。

in_array($array)

这个函数是判断当前值是否为数组哦

EX:

$array= array(1,2);
if( in_array( $array ) )
{
 die('in_array判断它是数组');
}
echo '不是数组';

result:

in_array判断它是数组


trim($value)


trim函数是去除参数的空值包括null," "

isset($value)

isset是判断变量是否存在

unset($value)

销毁变量

下面我们来看看isset,unset实例吧。

$a = 'v';

isset( $a ) ? $a:NULL;

unset( $a );

isset( $a ) ? $a:NULL;

结果是:

v

Null

is_numeric($num)

$num =3;

if( is_numeric($num) )
{
 echo $num;
}
else
{
 echo '不是数值';
}

本站原创转载注明来自www.111cn.net/phper/php.html

[!--infotagslink--]

相关文章

  • 不打开网页直接查看网站的源代码

      有一种方法,可以不打开网站而直接查看到这个网站的源代码..   这样可以有效地防止误入恶意网站...   在浏览器地址栏输入:   view-source:http://...2016-09-20
  • php 调用goolge地图代码

    <?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实现的个性菜单效果代码

    本文实例讲述了JS基于Mootools实现的个性菜单效果代码。分享给大家供大家参考,具体如下:这里演示基于Mootools做的带动画的垂直型菜单,是一个初学者写的,用来学习Mootools的使用有帮助,下载时请注意要将外部引用的mootools...2015-10-23
  • JS+CSS实现分类动态选择及移动功能效果代码

    本文实例讲述了JS+CSS实现分类动态选择及移动功能效果代码。分享给大家供大家参考,具体如下:这是一个类似选项卡功能的选择插件,与普通的TAb区别是加入了动画效果,多用于商品类网站,用作商品分类功能,不过其它网站也可以用,...2015-10-21
  • JS实现自定义简单网页软键盘效果代码

    本文实例讲述了JS实现自定义简单网页软键盘效果。分享给大家供大家参考,具体如下:这是一款自定义的简单点的网页软键盘,没有使用任何控件,仅是为了练习JavaScript编写水平,安全性方面没有过多考虑,有顾虑的可以不用,目的是学...2015-11-08
  • php 取除连续空格与换行代码

    php 取除连续空格与换行代码,这些我们都用到str_replace与正则函数 第一种: $content=str_replace("n","",$content); echo $content; 第二种: $content=preg_replac...2016-11-25
  • php简单用户登陆程序代码

    php简单用户登陆程序代码 这些教程很对初学者来讲是很有用的哦,这款就下面这一点点代码了哦。 <center> <p>&nbsp;</p> <p>&nbsp;</p> <form name="form1...2016-11-25
  • PHP实现清除wordpress里恶意代码

    公司一些wordpress网站由于下载的插件存在恶意代码,导致整个服务器所有网站PHP文件都存在恶意代码,就写了个简单的脚本清除。恶意代码示例...2015-10-23
  • jQuery实现广告显示和隐藏动画

    这篇文章主要为大家详细介绍了jQuery实现广告显示和隐藏动画,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-07-05
  • js识别uc浏览器的代码

    其实挺简单的就是if(navigator.userAgent.indexOf('UCBrowser') > -1) {alert("uc浏览器");}else{//不是uc浏览器执行的操作}如果想测试某个浏览器的特征可以通过如下方法获取JS获取浏览器信息 浏览器代码名称:navigator...2015-11-08
  • JS实现双击屏幕滚动效果代码

    本文实例讲述了JS实现双击屏幕滚动效果代码。分享给大家供大家参考,具体如下:这里演示双击滚屏效果代码的实现方法,不知道有觉得有用处的没,现在网上还有很多还在用这个特效的呢,代码分享给大家吧。运行效果截图如下:在线演...2015-10-30
  • JS日期加减,日期运算代码

    一、日期减去天数等于第二个日期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
  • PHP开发微信支付的代码分享

    微信支付,即便交了保证金,你还是处理测试阶段,不能正式发布。必须到你通过程序测试提交订单、发货通知等数据到微信的系统中,才能申请发布。然后,因为在微信中是通过JS方式调用API,必须在微信后台设置支付授权目录,而且要到...2014-05-31
  • 基于JavaScript实现表单密码的隐藏和显示出来

    为了网站的安全性,很多朋友都把密码设的比较复杂,但是如何密码不能明显示,不知道输的是对是错,为了安全起见可以把密码显示的,那么基于js代码如何实现的呢?下面通过本文给大家介绍JavaScript实现表单密码的隐藏和显示,需要的朋友参考下...2016-03-03
  • PHP常用的小程序代码段

    本文实例讲述了PHP常用的小程序代码段。分享给大家供大家参考,具体如下:1.计算两个时间的相差几天$startdate=strtotime("2009-12-09");$enddate=strtotime("2009-12-05");上面的php时间日期函数strtotime已经把字符串...2015-11-24
  • php怎么用拼音 简单的php中文转拼音的实现代码

    小编分享了一段简单的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商品无限级分类代码

    ecshop商品无限级分类代码 function cat_options($spec_cat_id, $arr) { static $cat_options = array(); if (isset($cat_options[$spec_cat_id]))...2016-11-25
  • 几种延迟加载JS代码的方法加快网页的访问速度

    本文介绍了如何延迟javascript代码的加载,加快网页的访问速度。 当一个网站有很多js代码要加载,js代码放置的位置在一定程度上将会影像网页的加载速度,为了让我们的网页加载速度更快,本文总结了一下几个注意点...2013-10-13
  • C#中动态显示当前系统时间的实例方法

    想在网页中动态地显示当前系统的时间,找了好多,不过都是一些停在那里不动的。。。不过皇天不负有心人,终于让我找到了...2020-06-25