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 相关文章推荐
Windows下的PHP5.0详解
Nov 18 PHP
使用php统计字符串中中英文字符的个数
Jun 23 PHP
php实现批量下载百度云盘文件例子分享
Apr 10 PHP
ThinkPHP之M方法实例详解
Jun 20 PHP
php使用GeoIP库实例
Jun 27 PHP
PHP实现对站点内容外部链接的过滤方法
Sep 10 PHP
PHP语法小结之基础和变量
Nov 22 PHP
CodeIgniter自定义控制器MY_Controller用法分析
Jan 20 PHP
Yii2如何批量添加数据
May 17 PHP
PHP开发APP端微信支付功能
Feb 17 PHP
php JWT在web端中的使用方法教程
Sep 06 PHP
php反序列化长度变化尾部字符串逃逸(0CTF-2016-piapiapia)
Feb 15 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函数preg_match_all正则表达式的基本使用详细解析
2013/08/31 PHP
CI框架入门示例之数据库取数据完整实现方法
2014/11/05 PHP
PHP采用curl模仿用户登陆新浪微博发微博的方法
2014/11/07 PHP
Yii2中设置与获取别名的函数(setAlias和getAlias)用法分析
2016/07/25 PHP
PHP加密技术的简单实现
2016/09/04 PHP
php代码调试利器firephp安装与使用方法分析
2018/08/21 PHP
EXT窗口Window及对话框MessageBox
2011/01/27 Javascript
Javascript实现Web颜色值转换
2015/02/05 Javascript
分析js闭包引起的事件注册问题
2016/03/29 Javascript
JS创建对象的写法示例
2016/11/04 Javascript
bootstrap daterangepicker汉化以及扩展功能
2017/06/15 Javascript
js HTML5 canvas绘制图片的方法
2017/09/08 Javascript
利用JS测试目标网站的打开响应速度
2017/12/01 Javascript
babel7.x和webpack4.x配置vue项目的方法步骤
2019/05/12 Javascript
全面分析JavaScript 继承
2019/05/30 Javascript
解决Echarts 显示隐藏后宽度高度变小的问题
2020/07/19 Javascript
vue打开新窗口并实现传参的图文实例
2021/03/04 Vue.js
[02:05]2014DOTA2西雅图国际邀请赛 BBC第二天小组赛总结
2014/07/11 DOTA
python读文件逐行处理的示例代码分享
2013/12/27 Python
python使用在线API查询IP对应的地理位置信息实例
2014/06/01 Python
Linux-ubuntu16.04 Python3.5配置OpenCV3.2的方法
2018/04/02 Python
浅谈python str.format与制表符\t关于中文对齐的细节问题
2019/01/14 Python
python从子线程中获得返回值的方法
2019/01/30 Python
英国潮流网站:END.(全球免邮)
2017/01/16 全球购物
美国在线购买和出售礼品卡网站:EJ Gift Cards
2019/06/09 全球购物
毕业生自荐信的主要内容
2013/10/29 职场文书
研究生求职推荐信范文
2013/11/30 职场文书
坚定理想信念心得体会
2014/03/11 职场文书
《一个小村庄的故事》教学反思
2014/04/13 职场文书
学雷锋先进个人事迹
2014/05/26 职场文书
2015年中职班主任工作总结
2015/05/25 职场文书
订货会主持词
2015/07/01 职场文书
运动会主持词大全
2015/07/02 职场文书
100句人生哲理语录集锦:强者征服今天,懒汉坐等明天
2019/10/18 职场文书
pytorch 如何使用amp进行混合精度训练
2021/05/24 Python
Nginx配置Https安全认证的实现
2021/05/26 Servers