β

分享PHP中获取IP和地理位置类的示例代码

郑州网建 138 阅读

发现之前有一个脚本没有写完,简单扩充了一下。
获取IP使用的是经典的逻辑,地理定位使用的是SINA的通用接口。

使用方法详见源码:

代码如下:

 <?php
 /*
  * GET LOCATION BY SINA IP INTERFACE
  *
  *              @SOULTEARY 2013.04.14
  */
 classIP
 {
     private $args=array();
  
     function__construct()
     {
         $this->args=self::init_args(func_get_args());
         $ip=self::GetIP();
  
         $ret=preg_match_all('/(\d+\.){3}\d+/i',$ip,$result);
         if(!$ret){
             returnfalse;
         }else{
             $result=$result[0];
         }
  
         if(isset($this->args['ONLYIP'])&&$this->args['ONLYIP']==true){
  
             if(isset($this->args['FORMAT'])&&$this->args['FORMAT']=='JSON'){
                 $result=json_encode($result);
             }else{
                 $result=implode(',',$result);
             }
             if(isset($this->args['ECHO'])&&$this->args['ECHO']==true){
                 echo$result;
                 returntrue;
             }else{
                 return$result;
             }
         }else{
  
             $apiURL='http://int.dpool.sina.com.cn/iplookup/iplookup.php?ip='.$result[0];
             if(isset($this->args['FORMAT'])&&$this->args['FORMAT']=='JSON'){
                 $apiURL.='&format=json';
                 $return=$this->ipCURL($apiURL);
             }else{
                 $return=$this->ipCURL($apiURL);
                 $return=iconv("GBK//IGNORE","UTF-8",$return);
             }
  
             if(isset($this->args['ECHO'])&&$this->args['ECHO']==true){
                 echo$return;
                 returntrue;
             }else{
                 return$return;
             }
  
         }
  
     }
  
     public functioninit_args($args)
     {
         $result=array();
         for($i=0,$n=count($args);$i<$n;$i++){
             $result=self::associative_push($args[$i],$result);
         }
         return$result;
     }
  
     public functionassociative_push($arr,$tmp)
     {
         if(is_array($tmp)){
             foreach($tmpas$key=>$value){
                 $arr[$key]=$value;
             }
             return$arr;
         }
         returnfalse;
     }
  
     public functionGetIP()
     {
         if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])&&$_SERVER['HTTP_X_FORWARDED_FOR']&&strcasecmp($_SERVER['HTTP_X_FORWARDED_FOR'],'unknown')){
             return$_SERVER['HTTP_X_FORWARDED_FOR'];
         }elseif(isset($_SERVER['REMOTE_ADDR'])&&$_SERVER['REMOTE_ADDR']&&strcasecmp($_SERVER['REMOTE_ADDR'],'unknown')){
             return$_SERVER['REMOTE_ADDR'];
         }
     }
  
     private functionipCURL($url)
     {
         $ch=curl_init();
         curl_setopt($ch,CURLOPT_URL,$url);
         curl_setopt($ch,CURLOPT_HEADER,0);
         ob_start();
         curl_exec($ch);
         curl_close($ch);
         $result=ob_get_contents();
         ob_end_clean();
         return$result;
     }
 }
  
 ?>
 <!DOCTYPE html>
 <html>
 <head>
     <meta charset="utf8">
     <title>demo</title>
     <script type="text/javascript">
         varip="<?php new IP(array('ONLYIP'=>true, 'ECHO'=>true));?>";
         vardata=<?php newIP(array('FORMAT'=>'JSON','ECHO'=>true));?>;
         varresult='';
         for(oo indata){
             result+=oo+':'+data[oo]+"\n";
         }
         alert(result+ip);
     </script>
 </head>
 <body>
 <h1>CODE:</h1>
  
 <h2>GETIP</h2>
  
 <p>'ONLYIP'=>true,'ECHO'=>true</p>
  
 <p><?phpnewIP(array('ONLYIP'=>true,'ECHO'=>true));?></p>
  
 <P>'ONLYIP'=>true,'FORMAT'=>'JSON','ECHO'=>true</P>
  
 <p><?phpnewIP(array('ONLYIP'=>true,'FORMAT'=>'JSON','ECHO'=>true));?></p>
  
 <h2>GET Location</h2>
  
 <p>'ECHO'=>true</p>
  
 <p><?phpnewIP(array('ECHO'=>true));?></p>
  
 <p>'FORMAT'=>'JSON','ECHO'=>true</p>
  
 <p><?php newIP(array('FORMAT'=>'JSON','ECHO'=>true));?></p>
 </body>
 </html>
作者:郑州网建
Good Good Study ,Day Day Up!
原文地址:分享PHP中获取IP和地理位置类的示例代码, 感谢原作者分享。