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


Posted in PHP onFebruary 10, 2015

发现之前有一个脚本没有写完,简单扩充了一下。
获取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>
PHP 相关文章推荐
php email邮箱正则
Oct 08 PHP
php动态生成JavaScript代码
Mar 09 PHP
php简单提示框alert封装函数
Aug 08 PHP
php各种编码集详解和以及在什么情况下进行使用
Sep 11 PHP
使用迭代器 遍历文件信息的详解
Jun 08 PHP
Codeigniter中禁止A Database Error Occurred错误提示的方法
Jun 12 PHP
PHP改进计算字符串相似度的函数similar_text()、levenshtein()
Oct 27 PHP
php使用COPY函数更新配置文件的方法
Jun 18 PHP
在WordPress中实现评论头像的自定义默认和延迟加载
Nov 24 PHP
静态html文件执行php语句的方法(推荐)
Nov 21 PHP
thinkphp关于简单的权限判定方法
Apr 03 PHP
PHP实现动态添加XML中数据的方法
Mar 30 PHP
PHP实现的简单mock json脚本分享
Feb 10 #PHP
PHP实现的带超时功能get_headers函数
Feb 10 #PHP
Laravel框架中实现使用阿里云ACE缓存服务
Feb 10 #PHP
Laravel中扩展Memcached缓存驱动实现使用阿里云OCS缓存
Feb 10 #PHP
PHP框架Laravel的小技巧两则
Feb 10 #PHP
Laravel模板引擎Blade中section的一些标签的区别介绍
Feb 10 #PHP
Laravel 5.0 发布 新版本特性详解
Feb 10 #PHP
You might like
第十节 抽象方法和抽象类 [10]
2006/10/09 PHP
让CodeIgniter数据库缓存自动过期的处理的方法
2014/06/12 PHP
ThinkPHP连接数据库的方式汇总
2014/12/05 PHP
php session的锁和并发
2016/01/22 PHP
php简单的上传类分享
2016/05/15 PHP
PHP实现登录验证码校验功能
2018/05/17 PHP
ThinkPHP5&amp;5.1实现验证码的生成、使用及点击刷新功能示例
2020/02/07 PHP
模仿jQuery each函数的链式调用
2009/07/22 Javascript
JSON取值前判断
2014/12/23 Javascript
JQuery中使文本框获得焦点的方法实例分析
2015/02/28 Javascript
jquery实现鼠标滑过小图查看大图的方法
2015/07/20 Javascript
jQuery实现可编辑的表格实例讲解(2)
2015/09/17 Javascript
基于jquery实现复选框全选,反选,全不选等功能
2015/10/16 Javascript
实例讲解js验证表单项是否为空的方法
2016/01/09 Javascript
AngularJS中使用HTML5手机摄像头拍照
2016/02/22 Javascript
jQuery实现只允许输入数字和小数点的方法
2016/03/02 Javascript
Angular.js与Bootstrap相结合实现手风琴菜单代码
2016/04/13 Javascript
基于react框架使用的一些细节要点的思考
2017/05/31 Javascript
Vue.js中数据绑定的语法教程
2017/06/02 Javascript
vue 实现小程序或商品秒杀倒计时
2019/04/14 Javascript
Layui table field初始化加载时进行隐藏的方法
2019/09/19 Javascript
Vue 中使用富文本编译器wangEditor3的方法
2019/09/26 Javascript
js+canvas绘制图形验证码
2020/09/21 Javascript
SQLite3中文编码 Python的实现
2017/01/11 Python
Python配置mysql的教程(推荐)
2017/10/13 Python
Python坐标线性插值应用实现
2019/11/13 Python
Python测试线程应用程序过程解析
2019/12/31 Python
pytorch掉坑记录:model.eval的作用说明
2020/06/23 Python
加拿大领先的冒险和户外零售商:Atmosphere
2017/12/19 全球购物
2014年手术室工作总结
2014/11/26 职场文书
2015年电工工作总结
2015/04/10 职场文书
运动会通讯稿200字
2015/07/20 职场文书
环境卫生标语
2015/08/03 职场文书
2019各种保证书范文
2019/06/24 职场文书
JavaWeb Servlet实现网页登录功能
2021/07/04 Java/Android
为什么RedisCluster设计成16384个槽
2021/09/25 Redis