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 相关文章推荐
在PHP3中实现SESSION的功能(一)
Oct 09 PHP
ADODB类使用
Nov 25 PHP
php中3种方法统计字符串中每种字符的个数并排序
Aug 27 PHP
php连接mssql的一些相关经验及注意事项
Feb 05 PHP
php ZipArchive压缩函数详解实例
Nov 06 PHP
PHP中实现生成静态文件的方法缓解服务器压力
Jan 07 PHP
Linux下PHP加速器APC的安装与配置笔记
Oct 24 PHP
php实现两表合并成新表并且有序排列的方法
Dec 05 PHP
Codeigniter的一些优秀特性总结
Jan 21 PHP
php实现处理输入转义字符的代码
Nov 08 PHP
PHP实现通过文本文件统计页面访问量功能示例
Feb 13 PHP
laravel 获取当前url的别名方法
Oct 11 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实现的简易扫雷游戏实例
2015/07/09 PHP
php类自动加载器实现方法
2015/07/28 PHP
php设计模式之观察者模式实例详解【星际争霸游戏案例】
2020/03/30 PHP
javascript 树控件 比较好用
2009/06/11 Javascript
最短的javascript:地址栏载入脚本代码
2011/10/13 Javascript
Jquery中&quot;$(document).ready(function(){ })&quot;函数的使用详解
2013/12/30 Javascript
ExtJS4给Combobox设置列表中的默认值示例
2014/05/02 Javascript
JS 弹出层 定位至屏幕居中示例
2014/05/21 Javascript
javascript中关于&amp;&amp; 和 || 表达式的小技巧分享
2015/04/10 Javascript
Bootstrap前端开发案例二
2016/06/17 Javascript
JavaScript中for循环的几种写法与效率总结
2017/02/03 Javascript
JS判断两个数组或对象是否相同的方法示例
2019/02/28 Javascript
详解vue2.0模拟后台json数据
2019/05/16 Javascript
如何在vue中使用HTML 5 拖放API
2021/01/14 Vue.js
[05:42]DOTA2英雄梦之声_第10期_蝙蝠骑士
2014/06/21 DOTA
[01:42:49]DOTA2-DPC中国联赛 正赛 iG vs PSG.LGD BO3 第一场 2月26日
2021/03/11 DOTA
详解Python命令行解析工具Argparse
2016/04/20 Python
用python实现刷点击率的示例代码
2019/02/21 Python
django项目简单调取百度翻译接口的方法
2019/08/06 Python
如何使用python实现模拟鼠标点击
2020/01/06 Python
详解background属性的8个属性值(面试题)
2020/11/02 HTML / CSS
FORZIERI福喜利中国官网:奢侈品购物梦工厂
2019/05/03 全球购物
英国高级健康和美容产品零售商:Life and Looks
2019/08/01 全球购物
SAZAC的动物连体衣和动物睡衣:Kigurumi Shop
2020/03/14 全球购物
新加坡第一的杂货零售商:NTUC FairPrice
2020/12/05 全球购物
通信工程专业女生个人求职信
2013/09/21 职场文书
兼职业务员岗位职责
2014/01/01 职场文书
优秀党员主要事迹
2014/01/19 职场文书
3.12植树节活动总结2014
2014/03/13 职场文书
合作协议书范文
2014/08/20 职场文书
卖车协议书范本4篇
2014/10/01 职场文书
银行员工考核评语
2014/12/31 职场文书
2015年护士长个人工作总结
2015/04/24 职场文书
2015年工会工作总结范文
2015/07/23 职场文书
小学生六年级作文之关于感恩
2019/08/16 职场文书