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 相关文章推荐
解析Ubuntu下crontab命令的用法
Jun 24 PHP
PHP常用函数和常见疑难问题解答
Mar 05 PHP
php实现文件编码批量转换
Mar 10 PHP
PHP遍历目录函数opendir()、readdir()、closedir()、rewinddir()总结
Nov 18 PHP
编写PHP脚本使WordPress的主题支持Widget侧边栏
Dec 14 PHP
46 个非常有用的 PHP 代码片段
Feb 16 PHP
[原创]php简单隔行变色功能实现代码
Jul 09 PHP
完美解决php 导出excle的.csv格式的数据时乱码问题
Feb 18 PHP
php解析mht文件转换成html的实例
Mar 13 PHP
thinkphp5.1 文件引入路径问题及注意事项
Jun 13 PHP
php+lottery.js实现九宫格抽奖功能
Jul 21 PHP
tp5框架基于Ajax实现列表无刷新排序功能示例
Feb 10 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进程之间实现共享内存的方法
2014/06/13 PHP
PHP5.5安装PHPRedis扩展及连接测试方法
2017/01/22 PHP
JQuery each()函数如何优化循环DOM结构的性能
2012/12/10 Javascript
jQuery使用动态渲染表单功能完成ajax文件下载
2013/01/15 Javascript
js如何获取兄弟、父类等节点
2014/01/06 Javascript
解决jQuery uploadify在非IE核心浏览器下无法上传
2015/08/05 Javascript
js实现鼠标点击左上角滑动菜单效果代码
2015/09/06 Javascript
深入浅析Node.js 事件循环
2015/12/20 Javascript
莱鸟介绍window.print()方法
2016/01/06 Javascript
js阻止移动端页面滚动的两种方法
2017/01/25 Javascript
node使用UEditor富文本编辑器的方法实例
2017/07/11 Javascript
纯js实现画一棵树的示例
2017/09/05 Javascript
深入浅出webpack教程系列_安装与基本打包用法和命令参数详解
2017/09/10 Javascript
浅谈vue中使用图片懒加载vue-lazyload插件详细指南
2017/10/23 Javascript
mockjs+vue页面直接展示数据的方法
2018/12/19 Javascript
用VsCode编辑TypeScript的实现方法
2020/05/07 Javascript
完美解决vue 中多个echarts图表自适应的问题
2020/07/19 Javascript
[00:36]我的中国心——Serenity vs Fnatic
2018/08/21 DOTA
Django中实现一个高性能计数器(Counter)实例
2014/07/09 Python
Python是编译运行的验证方法
2015/01/30 Python
python中的闭包用法实例详解
2015/05/05 Python
python正则表达式之作业计算器
2016/03/18 Python
Python只用40行代码编写的计算器实例
2017/05/10 Python
PythonWeb项目Django部署在Ubuntu18.04腾讯云主机上
2019/04/01 Python
python将视频转换为全字符视频
2019/04/26 Python
Python 处理文件的几种方式
2019/08/23 Python
python 根据网易云歌曲的ID 直接下载歌曲的实例
2019/08/24 Python
python识别文字(基于tesseract)代码实例
2019/08/24 Python
python pycharm的安装及其使用
2019/10/11 Python
医学专业个人求职自荐信格式
2013/09/23 职场文书
法院先进个人事迹材料
2014/05/04 职场文书
教师考核材料
2014/05/21 职场文书
思想纪律作风整顿剖析材料
2014/10/11 职场文书
县级领导干部开展党的群众路线教育实践活动工作汇报
2014/10/25 职场文书
高中生综合素质自我评价
2015/03/06 职场文书
SpringBoot2零基础到精通之数据库专项精讲
2022/03/22 Java/Android