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统计目录下的文件总数及代码行数(去除注释及空行)
Jan 17 PHP
一个简单的网页密码登陆php代码
Jul 17 PHP
PHP中extract()函数的定义和用法
Aug 17 PHP
linux下使用crontab实现定时PHP计划任务失败的原因分析
Jul 05 PHP
php中的mongodb select常用操作代码示例
Sep 06 PHP
PHP制作百度词典查词采集器
Jan 29 PHP
smarty模板引擎之内建函数用法
Mar 30 PHP
Laravel路由设定和子路由设定实例分析
Mar 30 PHP
PHP微信开发之根据用户回复关键词\位置返回附近信息
Jun 24 PHP
多个Laravel项目如何共用migrations详解
Sep 25 PHP
Laravel框架搜索分页功能示例
Feb 01 PHP
laravel 使用事件系统统计浏览量的实现
Oct 16 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
咖啡豆分级制度 咖啡豆等级分类 咖啡豆是按口感分类的吗?
2021/03/05 新手入门
第十二节 类的自动加载 [12]
2006/10/09 PHP
五个PHP程序员工具
2008/05/26 PHP
深入PHP变量存储的详解
2013/06/13 PHP
PHP制作万年历
2015/01/07 PHP
php创建session的方法实例详解
2015/01/27 PHP
phplist及phpmailer(组合使用)通过gmail发送邮件的配置方法
2016/03/30 PHP
php策略模式简单示例分析【区别于工厂模式】
2019/09/25 PHP
xml分页+ajax请求数据源+dom取结果实例代码
2008/10/31 Javascript
jquery获取input的value问题说明
2010/08/19 Javascript
javascript结合html5 canvas实现(可调画笔颜色/粗细/橡皮)的涂鸦板
2013/04/27 Javascript
javascript基于DOM实现权限选择实例分析
2015/05/14 Javascript
jQuery获取file控件中图片的宽高与大小
2016/08/04 Javascript
jquery实现网站列表切换效果的2种方法
2016/08/12 Javascript
利用bootstrapValidator验证UEditor
2016/09/14 Javascript
通过js控制时间,一秒一秒自己动的实例
2017/10/25 Javascript
[01:08:29]DOTA2-DPC中国联赛定级赛 RNG vs Aster BO3第一场 1月9日
2021/03/11 DOTA
python利用beautifulSoup实现爬虫
2014/09/29 Python
浅谈python中的正则表达式(re模块)
2017/10/17 Python
python requests 测试代理ip是否生效
2018/07/25 Python
python 获取utc时间转化为本地时间的方法
2018/12/31 Python
Python使用pydub库对mp3与wav格式进行互转的方法
2019/01/10 Python
Python3实现计算两个数组的交集算法示例
2019/04/03 Python
Python3.x+pyqtgraph实现数据可视化教程
2020/03/14 Python
jupyter notebook插入本地图片的实现
2020/04/13 Python
利用CSS3的特性改变文本选中时的颜色
2013/09/11 HTML / CSS
英国最大的美妆产品在线零售商之一:Beauty Bay
2017/09/29 全球购物
Easy Spirit官网:美国休闲鞋履中的代表品牌
2019/04/12 全球购物
远东集团网络工程师面试题
2014/10/20 面试题
介绍一下except的用法和作用
2015/01/22 面试题
写求职信要注意什么问题
2014/04/12 职场文书
十周年庆典策划方案
2014/06/03 职场文书
2014年物流工作总结
2014/11/25 职场文书
2016年世界人口日宣传活动总结
2016/04/05 职场文书
创业计划书之闲置物品置换中心
2019/12/25 职场文书
python实现求纯色彩图像的边框
2021/04/08 Python