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

 更新时间:2015年02月10日 10:27:41   投稿:junjie  
这篇文章主要介绍了PHP中实现获取IP和地理位置类分享,本文地理定位使用的是SINA的通用接口,需要的朋友可以参考下

发现之前有一个脚本没有写完,简单扩充了一下。
获取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>

相关文章

  • Laravel中GraphQL接口请求频率实战记录

    Laravel中GraphQL接口请求频率实战记录

    这篇文章主要给大家介绍了关于Laravel中GraphQL接口请求频率的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • php设计模式之迭代器模式实例分析【星际争霸游戏案例】

    php设计模式之迭代器模式实例分析【星际争霸游戏案例】

    这篇文章主要介绍了php设计模式之迭代器模式,结合星际争霸游戏案例形式分析了PHP迭代器模式相关原理、用法及操作注意事项,需要的朋友可以参考下
    2020-04-04
  • php下载远程大文件(获取远程文件大小)的实例

    php下载远程大文件(获取远程文件大小)的实例

    下面小编就为大家带来一篇php下载远程大文件(获取远程文件大小)的实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06
  • PHP实现微信网页授权开发教程

    PHP实现微信网页授权开发教程

    这篇文章主要为大家分享了PHP实现微信网页授权开发教程,开发者可以通过授权后获取用户的基本信息,感兴趣的小伙伴们可以参考一下
    2016-01-01
  • 浅析ThinkPHP缓存之快速缓存(F方法)和动态缓存(S方法)(日常整理)

    浅析ThinkPHP缓存之快速缓存(F方法)和动态缓存(S方法)(日常整理)

    thinkPHP的F方法只能用于缓存简单数据类型,不支持有效期和缓存对象。S()缓存方法支持有效期,又称动态缓存方法。本文是小编日常整理有关thinkphp缓存方法,对thinkphp缓存方法感兴趣的朋友一起学习吧
    2015-10-10
  • LNMP部署laravel以及xhprof安装使用教程

    LNMP部署laravel以及xhprof安装使用教程

    这篇文章主要介绍了关于在LNMP上部署laravel以及xhprof安装使用的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2017-09-09
  • php 运算符与表达式详细介绍

    php 运算符与表达式详细介绍

    运算符和表达式是php学习中最基础的知识,本文章通过实例向大家讲解一下运算符和表达式在php中的一些应用和技巧,以及需要注意的地方,需要的朋友可以参考一下。
    2016-11-11
  • WordPress中is_singular()函数简介

    WordPress中is_singular()函数简介

    这篇文章主要介绍了WordPress中is_singular()函数简介的相关资料,需要的朋友可以参考下
    2015-02-02
  • Smarty日期时间操作方法示例

    Smarty日期时间操作方法示例

    这篇文章主要介绍了Smarty日期时间操作方法,结合实例形式较为详细的分析了Smarty日期时间操作相关函数、参数功能及使用技巧,需要的朋友可以参考下
    2016-11-11
  • php实现批量上传数据到数据库(.csv格式)的案例

    php实现批量上传数据到数据库(.csv格式)的案例

    下面小编就为大家带来一篇php实现批量上传数据到数据库(.csv格式)的案例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06

最新评论