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 相关文章推荐
简单的页面缓冲技术
Oct 09 PHP
php 魔术方法使用说明
Oct 20 PHP
php中比较简单的导入phpmyadmin生成的sql文件的方法
Jun 28 PHP
php中可能用来加密字符串的函数[base64_encode、urlencode、sha1]
Jan 16 PHP
php网上商城购物车设计代码分享
Feb 15 PHP
PHP 验证码不显示只有一个小红叉的解决方法
Sep 30 PHP
php class类的用法详细总结
Oct 17 PHP
PHP开发框架kohana中处理ajax请求的例子
Jul 14 PHP
PHP实现设计模式中的抽象工厂模式详解
Oct 11 PHP
php实现求相对时间函数
Jun 15 PHP
PHP递归实现文件夹的复制、删除、查看大小操作示例
Aug 11 PHP
php面试中关于面向对象的相关问题
Feb 13 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
PHP表单递交控件名称含有点号(.)会被转化为下划线(_)的处理方法
2013/01/06 PHP
ThinkPHP函数详解之M方法和R方法
2015/09/10 PHP
JavaScript是否可实现多线程  深入理解JavaScript定时机制
2009/12/22 Javascript
Json对象替换字符串占位符实现代码
2010/11/17 Javascript
javascript中[]和{}对象使用介绍
2013/03/20 Javascript
下拉列表选择项的选中在不同浏览器中的兼容性问题探讨
2013/09/18 Javascript
js实现iframe跨页面调用函数的方法
2014/12/13 Javascript
Ajax清除浏览器js、css、图片缓存的方法
2015/08/06 Javascript
浅析JavaScript回调函数应用
2016/05/22 Javascript
js如何获取网页所有图片
2017/05/12 Javascript
JS闭包的几种常见形式实例详解
2017/09/16 Javascript
详解vuex结合localstorage动态监听storage的变化
2018/05/03 Javascript
微信小程序实现倒计时调用相机自动拍照功能
2018/06/10 Javascript
Vue中使用方法、计算属性或观察者的方法实例详解
2018/10/31 Javascript
详解vue 组件的实现原理
2020/11/12 Javascript
[03:48]显微镜下的DOTA2第四期——TP动作
2014/06/20 DOTA
python manage.py runserver流程解析
2019/11/08 Python
python 中的[:-1]和[::-1]的具体使用
2020/02/13 Python
Python flask路由间传递变量实例详解
2020/06/03 Python
利用Python发送邮件或发带附件的邮件
2020/11/12 Python
HTML5 video 上传预览图片视频如何设置、预览视频某秒的海报帧
2018/08/28 HTML / CSS
GAP美国官网:美国休闲时尚品牌
2016/08/26 全球购物
联想加拿大官方网站:Lenovo Canada
2018/04/05 全球购物
美国轮胎网站:Priority Tire
2018/11/28 全球购物
SK-II神仙水美国官网:SK-II美国
2020/02/25 全球购物
四种会话跟踪技术
2015/05/20 面试题
现代化办公人员工作的自我评价
2013/10/16 职场文书
缴纳养老保险的证明
2014/01/10 职场文书
公司领导班子对照材料
2014/08/18 职场文书
抗洪救灾标语
2014/10/08 职场文书
高中班主任评语
2014/12/30 职场文书
保密法制宣传月活动总结
2015/05/07 职场文书
“5.12”护士节主持词
2015/07/04 职场文书
python实现三次密码验证的示例
2021/04/29 Python
Python办公自动化之教你如何用Python将任意文件转为PDF格式
2021/06/28 Python
详解JavaScript的计时器和按钮效果设置
2022/02/18 Javascript