`
hudeyong926
  • 浏览: 2016105 次
  • 来自: 武汉
社区版块
存档分类
最新评论

php取得客户端信息类

阅读更多
<?php

/**
 *
 * 根据sina api获取用户的IP地址及地理信息
 * eg: Guest::Instance()->getBrowser();
 *
 */
class Guest
{
	private static $_instance;
    private $ipUrl = 'http://1212.ip138.com/ic.asp';
    private $ipApiUrl = 'http://int.dpool.sina.com.cn/iplookup/iplookup.php?ip=';

    /**
     * 单例模式
     * @return map
     */
    public static function Instance()
    {
        if (!self::$_instance instanceof self) {
            self::$_instance = new self;
        }
        return self::$_instance;
    }

    //获得访客浏览器类型
    function getBrowser()
    {
        if (!empty($_SERVER['HTTP_USER_AGENT'])) {
            $br = $_SERVER['HTTP_USER_AGENT'];
            if (preg_match('/MSIE/i', $br)) {
                $br = 'MSIE';
            } elseif (preg_match('/Firefox/i', $br)) {
                $br = 'Firefox';
            } elseif (preg_match('/Chrome/i', $br)) {
                $br = 'Chrome';
            } elseif (preg_match('/Safari/i', $br)) {
                $br = 'Safari';
            } elseif (preg_match('/Opera/i', $br)) {
                $br = 'Opera';
            } else {
                $br = 'Other';
            }
            return $br;
        } else {
            return "获取浏览器信息失败!";
        }
    }

    //获得访客浏览器语言
    function getLang()
    {
        if (!empty($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
            $lang = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
            $lang = substr($lang, 0, 5);
            if (preg_match("/zh-cn/i", $lang)) {
                $lang = "简体中文";
            } elseif (preg_match("/zh/i", $lang)) {
                $lang = "繁体中文";
            } else {
                $lang = "English";
            }
            return $lang;

        } else {
            return "获取浏览器语言失败!";
        }
    }

    //获取访客操作系统
    function getOs()
    {
        if (!empty($_SERVER['HTTP_USER_AGENT'])) {
            $OS = $_SERVER['HTTP_USER_AGENT'];
            if (preg_match('/win/i', $OS)) {
                $OS = 'Windows';
            } elseif (preg_match('/mac/i', $OS)) {
                $OS = 'MAC';
            } elseif (preg_match('/linux/i', $OS)) {
                $OS = 'Linux';
            } elseif (preg_match('/unix/i', $OS)) {
                $OS = 'Unix';
            } elseif (preg_match('/bsd/i', $OS)) {
                $OS = 'BSD';
            } else {
                $OS = 'Other';
            }
            return $OS;
        } else {
            return "获取访客操作系统信息失败!";
        }
    }

    //获得访客真实ip
    function getIp()
    {
		$ips = array();
		$ip = '';
        if (!empty($_SERVER["HTTP_CLIENT_IP"])) {
            $ip = $_SERVER["HTTP_CLIENT_IP"];
        }
        if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) { //获取代理ip
            $ips = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
        }
        if ($ip) {
            $ips = array_unshift($ips, $ip);
        }

        $count = count($ips);
        for ($i = 0; $i < $count; $i++) {
            if (!preg_match("/^(10|172\.16|192\.168)\./i", $ips[$i])) { //排除局域网ip
                $ip = $ips[$i];
                break;
            }
        }
        $tip = empty($_SERVER['REMOTE_ADDR']) ? $ip : $_SERVER['REMOTE_ADDR'];
        if ($tip == "127.0.0.1") { //获得本地真实IP
            return $this->get_onlineip();
        } else {
            return $tip;
        }
    }

    //获得本地真实IP  如果有问题http://www.ip138.com/找到iframe更新ipUrl
    function get_onlineip()
    {
        $mip = file_get_contents($this->ipUrl);
        if ($mip) {
            preg_match("/\[.*\]/", $mip, $sip);
            $p = array("/\[/", "/\]/");
            return preg_replace($p, "", $sip[0]);
        } else {
            return "获取IP地址失败";
        }
    }

    //根据ip获得访客所在地地名
    function getAddress($ip = '')
    {
        if (empty($ip)) {
            $ip = $this->getIp();
        }
        $ipadd = file_get_contents($this->ipApiUrl. $ip); //根据新浪api接口获取
        if ($ipadd) {
            $charset = iconv("gbk", "utf-8", $ipadd);
            preg_match_all("/[\x{4e00}-\x{9fa5}]+/u", $charset, $ipadds);

            return $ipadds; //返回一个二维数组
        } else {
            return "地址不存在";
        }
    }
}
?>

 

分享到:
评论

相关推荐

    一个可以取得客户端的ip、地理信息、浏览器、本地真实IP的php类库.zip

    一个可以取得客户端的ip、地理信息、浏览器、本地真实IP的php类库,感兴趣的朋友们可以下载下来,用到自己的项目中。

    一个可以取得客户端的ip、地理信息、浏览器、本地真实IP的php类库

    一个可以取得客户端的ip、地理信息、浏览器、本地真实IP的php类库

    php读取手机客户端浏览器的类库.zip

    移动互联网时代,手机站是必须的,以下是本人整理的php获取手机浏览器的信息函数,希望对您开发手机站有所帮助,此收藏的手机信息函数类有取手机号码,浏览器报头信息,取得手机类型,取得手机IP等功能

    php实现读取手机客户端浏览器的类

    * 描述: 手机信息类 * 其他: 偶然 编写 */ class mobile{ /** * 函数名称: getPhoneNumber * 函数功能: 取手机号 * 输入参数: none * 函数返回值: 成功返回号码,失败返回false * 其它说明:...

    window composer客户端

    Composer 是 PHP 用来管理依赖(dependency)关系的工具。你可以在自己的项目中声明所依赖的外部工具库(libraries),Composer 会帮你安装这些依赖的库文件。

    PHP获取客户端真实IP地址的5种情况分析和实现代码

    要想透过代理服务器取得客户端的真实 IP 地址,就要使用 $_SERVER[“HTTP_X_FORWARDED_FOR”] 来读取。 (2) 但只有客户端使用“透明代理”的情况下,$_SERVER[“HTTP_X_FORWARDED_FOR”] 的值才是客户端真正的IP...

    php中获取远程客户端的真实ip地址的方法

    (1).REMOTE_ADDR:浏览当前页面的用户计算机的ip地址 (2).HTTP_X_FORWARDED_FOR: 浏览当前页面的用户计算机的网关 (3).HTTP_CLIENT_IP:客户端的ip 在PHP 中使用 $_SERVER[“REMOTE_ADDR”] 来取得客户端的 IP 地址,...

    php适用于各种数据库链接类.zip

    介绍一个适用于各种数据库链接类,返回根据从结果集取得的行生成的数组,返回根据所取得的行生成的对象,取得前一次 MySQL 操作所影响的记录行数,获得客户端真实的IP地址。

    php:PHP的PubNub客户端

    取得金钥 您将需要发布和订阅密钥来对您的应用进行身份验证。 从获取密钥。 配置PubNub 将Java SDK集成到您的项目中: 没有作曲家 克隆以下存储库: git clone https://github.com/pubnub/php.git ./pubnub-php ...

    PHP 使用技巧集.rar

    PHP处理多个同名复选框,并在客户端用javascript来判断 把PHP4安装到Win2000的IIS5中 如何实现页面自动跳转 正则表达式使用详解 正则表达式使用详解(二) PHP4.04 PWS在Win98下的安装与配

    精通正则表达式基于.NET ASP PHP JSP JavaScript

    取得正则表达式的全部匹配.php 取得正则表达式的全部匹配 返回与模式匹配的数组单元.php 返回与模式匹配的数组单元 正则表达式的替换.php 正则表达式的替换 正则表达式的拆分.php 正则表达式的拆分 表单验证....

    [php]mysql数据库操作——DB类

    // 取得 MySQL 客户端信息 } } /****************************************************************** -- 函数名:query($sql) -- 作 用:数据库执行语句,可执行查询添加修改删除等任何sql语句 -- 参 数:...

    PHP获取访问设备信息的方法示例

    // // 作用取得客户端的ip、地理位置、浏览器、以及访问设备 class get_equipment_info{ ////获得访客浏览器类型 function GetBrowser(){ if(!empty($_SERVER['HTTP_USER_AGENT'])) { $br = $_SERVER['...

    PHP开发实战1200例(第1卷).(清华出版.潘凯华.刘中华).part1

     《PHP开发实战1200例》分为I、II两卷共计1200个例子,包括了开发中各个方面最常用的实例,是目前市场上实例最全面的开发类图书;书中实例来源于多位工程师的多年积累,具有很强的实用性。 本书是第I卷,以开发...

    php上传进度条APC

    至于客户端嘛当然是用JS取得APC_UPLOAD_PROGRESS的值了,当然还有AJAX。我们得到的上传进度并不是理想连续的,如想获得更好的用户体验,需要在客户端用JS作进一步处理。 在写这篇文档的时候,各空间商们基本没有...

    xendit-php:适用于PHP的Xendit REST API客户端-卡,虚拟帐户,发票,支出,定期付款,付款,EWallet,余额,零售店服务

    Xendit API PHP客户端 该库是Xendit API的抽象,可以从用PHP编写的应用程序访问。 实付款 创建支出 创建批次支出 通过ID获取付款 通过外部ID获取支出 获取可支配的银行 电子钱包 创建电子钱包费用 获取电子钱包收费...

    为你总结一些php信息函数

    PHP信息函数包含的一些函数概念总结如下。 PHP信息函数之getenv 适用版本:PHP3, PHP4 函数功能:取得环境变量数值。 函数语法:string getenv (string varname) 函数说明:这个函数能够返回 PHP 的环境变量数值, ...

    PHP开发实战1200例(第1卷).(清华出版.潘凯华.刘中华).part2

     《PHP开发实战1200例》分为I、II两卷共计1200个例子,包括了开发中各个方面最常用的实例,是目前市场上实例最全面的开发类图书;书中实例来源于多位工程师的多年积累,具有很强的实用性。 本书是第I卷,以开发...

Global site tag (gtag.js) - Google Analytics