PHP中实现获取IP和地理位置类分享
发现之前有一个脚本没有写完,简单扩充了一下。
获取IP使用的是经典的逻辑,地理定位使用的是SINA的通用接口。
使用方法详见源码:
<?php
/*
 *GETLOCATIONBYSINAIPINTERFACE
 *
 *             @SOULTEARY2013.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;
           }
 
       }
 
   }
 
   publicfunctioninit_args($args)
   {
       $result=array();
       for($i=0,$n=count($args);$i<$n;$i++){
           $result=self::associative_push($args[$i],$result);
       }
       return$result;
   }
 
   publicfunctionassociative_push($arr,$tmp)
   {
       if(is_array($tmp)){
           foreach($tmpas$key=>$value){
               $arr[$key]=$value;
           }
           return$arr;
       }
       returnfalse;
   }
 
   publicfunctionGetIP()
   {
       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'];
       }
   }
 
   privatefunctionipCURL($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;
   }
}
 
?>
<!DOCTYPEhtml>
<html>
<head>
   <metacharset="utf8">
   <title>demo</title>
   <scripttype="text/javascript">
       varip="<?phpnewIP(array('ONLYIP'=>true,'ECHO'=>true));?>";
       vardata=<?phpnewIP(array('FORMAT'=>'JSON','ECHO'=>true));?>;
       varresult='';
       for(ooindata){
           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>GETLocation</h2>
 
<p>'ECHO'=>true</p>
 
<p><?phpnewIP(array('ECHO'=>true));?></p>
 
<p>'FORMAT'=>'JSON','ECHO'=>true</p>
 
<p><?phpnewIP(array('FORMAT'=>'JSON','ECHO'=>true));?></p>
</body>
</html>
