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 相关文章推荐
无法载入 mcrypt 扩展,请检查 PHP 配置终极解决方案
Jul 18 PHP
PHP计数器的实现代码
Jun 08 PHP
php统计时间和内存使用情况示例分享
Mar 13 PHP
PHP+jQuery翻板抽奖功能实现
Oct 19 PHP
php flush无效,IIS7下php实时输出的方法
Aug 25 PHP
PHP常用的三种设计模式汇总
Aug 28 PHP
php事件驱动化设计详解
Nov 10 PHP
如何用PHP做到页面注册审核
Mar 02 PHP
如何修改yii2.0自带的user表为其它的表
Aug 01 PHP
php7安装yar扩展的方法详解
Aug 03 PHP
layui框架实现文件上传及TP3.2.3(thinkPHP)对上传文件进行后台处理操作示例
May 12 PHP
ThinkPHP 3使用OSS的方法
Jul 19 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
phpstrom使用xdebug配置方法
2013/12/17 PHP
php二维数组转成字符串示例
2014/02/17 PHP
php导入excel文件到mysql数据库的方法
2015/01/14 PHP
php生成唯一数字id的方法汇总
2015/11/18 PHP
PHP实现的62进制转10进制,10进制转62进制函数示例
2019/06/06 PHP
PHP 扩展Memcached命令用法实例总结
2020/06/04 PHP
50个优秀经典PHP算法大集合 附源码
2020/08/26 PHP
通过身份证号得到出生日期和性别的js代码
2009/11/23 Javascript
关于juqery radio写法的兼容性问题(新老版本jquery)
2010/06/14 Javascript
jquery触发a标签跳转事件示例代码
2013/07/21 Javascript
JS获取键盘上任意按键的值(实例代码)
2013/11/12 Javascript
JavaScript中number转换成string介绍
2014/12/31 Javascript
JavaScript实现添加、查找、删除元素
2015/07/02 Javascript
基于AngularJS+HTML+Groovy实现登录功能
2016/02/17 Javascript
javascript Promise简单学习使用方法小结
2016/05/17 Javascript
JS获取一个未知DIV高度的方法
2016/08/09 Javascript
VUE使用vuex解决模块间传值问题的方法
2017/06/01 Javascript
基于input框覆盖掉数字英文的实例讲解
2017/07/21 Javascript
async/await地狱该如何避免详解
2018/05/10 Javascript
详解webpack loader和plugin编写
2018/10/12 Javascript
JavaScript中this用法学习笔记
2019/03/17 Javascript
异步任务队列Celery在Django中的使用方法
2018/06/07 Python
Python时间序列处理之ARIMA模型的使用讲解
2019/04/02 Python
python关于矩阵重复赋值覆盖问题的解决方法
2019/07/19 Python
Flask框架重定向,错误显示,Responses响应及Sessions会话操作示例
2019/08/01 Python
Python中字典与恒等运算符的用法分析
2019/08/22 Python
Pytorch 实现计算分类器准确率(总分类及子分类)
2020/01/18 Python
完美解决keras保存好的model不能成功加载问题
2020/06/11 Python
解决运行django程序出错问题 'str'object has no attribute'_meta'
2020/07/15 Python
英国骑行、跑步、游泳、铁人三项运动装备专卖店:Wiggle
2016/08/23 全球购物
英国和世界各地鲜花速递专家:Arena Flowers
2018/02/10 全球购物
J2EE模式面试题
2016/10/11 面试题
承诺书样本
2014/08/30 职场文书
群众路线自查报告及整改措施
2014/11/04 职场文书
2014年客服工作总结范文
2014/11/13 职场文书
幼师求职自荐信
2015/03/26 职场文书