PHP中实现获取IP和地理位置类分享

  发现之前有一个脚本没有写完,简单扩充了一下。

  获取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>