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 相关文章推荐
PHPMailer邮件类利用smtp.163.com发送邮件方法
Sep 11 PHP
php json_encode奇怪问题说明
Sep 27 PHP
PHP中的多行字符串传递给JavaScript的两种方法
Jun 19 PHP
PHP常用技术文之文件操作和目录操作总结
Sep 27 PHP
php实现window平台的checkdnsrr函数
May 27 PHP
Zend Framework创建自己的动作助手详解
Mar 05 PHP
php实现贪吃蛇小游戏
Jul 26 PHP
PHP url的pathinfo模式加载不同控制器的简单实现
Aug 12 PHP
php递归函数怎么用才有效
Feb 24 PHP
PHP实现会员账号单唯一登录的方法分析
Mar 07 PHP
ThinkPHP 5.1 跨域配置方法
Oct 11 PHP
聊聊 PHP 8 新特性 Attributes
Aug 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
海贼王动画变成“真人”后,凯多神还原,雷利太帅了!
2020/04/09 日漫
PHP return语句另类用法不止是在函数中
2014/09/17 PHP
laravel学习教程之关联模型
2016/07/30 PHP
PHP合并数组函数array_merge用法分析
2017/02/17 PHP
input、button的不同type值在ajax提交表单时导致的陷阱
2009/02/24 Javascript
javascript cookie操作类的实现代码小结附使用方法
2010/06/02 Javascript
理解Javascript_10_对象模型
2010/10/16 Javascript
javascript中的toFixed固定小数位数 简单实例分享
2013/07/12 Javascript
jquery easyui 结合jsp简单展现table数据示例
2014/04/18 Javascript
node.js中的Socket.IO使用实例
2014/11/04 Javascript
由简入繁实现Jquery树状结构的方法(推荐)
2016/06/10 Javascript
Angular2 组件通信的实例代码
2017/06/23 Javascript
基于vue2.0动态组件及render详解
2018/03/17 Javascript
浅谈jquery fullpage 插件增加头部和版权的方法
2018/03/20 jQuery
使用 Node.js 实现图片的动态裁切及算法实例代码详解
2018/09/29 Javascript
vue.js使用v-model实现表单元素(input) 双向数据绑定功能示例
2019/03/08 Javascript
Vue父子传递实例讲解
2020/02/14 Javascript
JavaScript进阶(二)词法作用域与作用域链实例分析
2020/05/09 Javascript
Vue将props值实时传递 并可修改的操作
2020/08/09 Javascript
NodeJS模块Buffer原理及使用方法解析
2020/11/11 NodeJs
在Python程序中进行文件读取和写入操作的教程
2015/04/28 Python
Python cookbook(数据结构与算法)在字典中将键映射到多个值上的方法
2018/02/18 Python
python实现定时自动备份文件到其他主机的实例代码
2018/02/23 Python
PySide和PyQt加载ui文件的两种方法
2019/02/27 Python
Python中新式类与经典类的区别详析
2019/07/10 Python
Golang GBK转UTF-8的例子
2019/08/26 Python
Python confluent kafka客户端配置kerberos认证流程详解
2020/10/12 Python
CSS教程:CSS3圆角属性
2009/04/02 HTML / CSS
Christys’ Hats官网:英国帽子制造商
2018/11/28 全球购物
Diamondback自行车:拥有你的冒险
2019/04/22 全球购物
Hammitt官网:设计师手袋
2020/05/23 全球购物
三年级数学教学反思
2014/01/31 职场文书
投资合作协议书范本
2014/04/17 职场文书
自主招生推荐信范文
2014/05/10 职场文书
Python 中random 库的详细使用
2021/06/03 Python
Python中可变和不可变对象的深入讲解
2021/08/02 Python