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 相关文章推荐
PHPlet在Windows下的安装
Oct 09 PHP
一个php作的文本留言本的例子(六)
Oct 09 PHP
PHP 字符串分割和比较
Oct 06 PHP
php 多线程上下文中安全写文件实现代码
Dec 28 PHP
PHP的autoload自动加载机制使用说明
Dec 28 PHP
PHP中使用sleep函数实现定时任务实例分享
Aug 21 PHP
PHP循环遍历数组的3种方法list()、each()和while总结
Nov 19 PHP
浅析PHP中call user func()函数及如何使用call user func调用自定义函数
Nov 05 PHP
Yii全局函数用法示例
Jan 22 PHP
form表单传递数组数据、php脚本接收的实例
Feb 09 PHP
php 可变函数使用小结
Jun 12 PHP
php使用curl模拟多线程实现批处理功能示例
Jul 25 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编程网上资源导航
2006/10/09 PHP
PHP 和 MySQL 基础教程(二)
2006/10/09 PHP
PHP实现的线索二叉树及二叉树遍历方法详解
2016/04/25 PHP
PHP删除字符串中非字母数字字符方法总结
2019/01/20 PHP
Laravel路由研究之domain解决多域名问题的方法示例
2019/04/04 PHP
广告显示判断
2006/08/31 Javascript
JavaScript判断两种格式的输入日期的正确性的代码
2007/03/25 Javascript
为jQuery.Treeview添加右键菜单的实现代码
2010/10/22 Javascript
jquery win 7透明弹出层效果的简单代码
2013/08/06 Javascript
鼠标悬浮显示二级菜单效果的jquery实现
2014/10/29 Javascript
avalonjs实现仿微博的图片拖动特效
2015/05/06 Javascript
BootStrap下jQuery自动完成的样式调整
2016/05/30 Javascript
vue动态改变背景图片demo分享
2018/09/13 Javascript
java和js实现的洗牌小程序
2019/09/30 Javascript
python抓取网页时字符集转换问题处理方案分享
2014/06/19 Python
Python采用raw_input读取输入值的方法
2014/08/18 Python
使用Python的Tornado框架实现一个一对一聊天的程序
2015/04/25 Python
pandas pivot_table() 按日期分多列数据的方法
2018/11/16 Python
Python 按字典dict的键排序,并取出相应的键值放于list中的实例
2019/02/12 Python
python 使用socket传输图片视频等文件的实现方式
2019/08/07 Python
python实现按首字母分类查找功能
2019/10/31 Python
windows环境中利用celery实现简单任务队列过程解析
2019/11/29 Python
python实现ip地址的包含关系判断
2020/02/07 Python
Django中的模型类设计及展示示例详解
2020/05/29 Python
Python 如何反方向迭代一个序列
2020/07/28 Python
selenium与xpath之获取指定位置的元素的实现
2021/01/26 Python
HTML5 CSS3给网站设计带来出色效果
2009/07/16 HTML / CSS
编写html5时调试发现脚本php等网页js、css等失效
2013/12/31 HTML / CSS
Hobbs官方网站:英国奢华女性时尚服装
2020/02/22 全球购物
ShellScript面试题一则-ShellScript编程
2014/06/24 面试题
党员干部四风问题整改措施思想汇报
2014/10/12 职场文书
主持人大赛开场白
2015/05/29 职场文书
2015年政教主任工作总结
2015/07/23 职场文书
2016年教师党员承诺书范文
2016/03/24 职场文书
php引用传递
2021/04/01 PHP
实战 快速定位MySQL的慢SQL
2022/03/22 MySQL