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>