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

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

    总的来说,这个"3ip类库"为PHP开发者提供了一站式的解决方案,简化了获取客户端信息的过程,使得开发者能更专注于业务逻辑,提高开发效率。正确理解和使用此类库,可以帮助我们更好地服务用户,优化网站体验。

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

    在PHP编程中,获取客户端的信息是一项常见的需求,例如用户的IP地址、地理位置、浏览器信息以及本地真实IP等。这些数据在网站统计、用户行为分析、安全防护等方面都有重要作用。本篇文章将详细讲解如何利用PHP实现这...

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

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

    window composer客户端

    Composer是一个自动加载器(autoloader),能够自动加载PHP类库,使得开发者无需手动引入所需的类文件,从而简化了代码管理。在PHP的世界里,很多开源框架和库如Laravel、Symfony等都依赖于Composer来管理其依赖。 ...

    php取得用户IP地址类.zip

    这个"php取得用户IP地址类.zip"压缩包包含了一个专门用于获取用户IP地址的PHP类,以及两个附加文件:"php中文网免费下载站.txt"和"php中文网下载站.url",这可能指向了该类的来源或相关资源。 首先,让我们详细了解...

    服务器端和客户端程序

    在IT领域,服务器端和客户端程序是构建网络应用的基础组件,它们共同构成了互联网服务的核心架构。这个主题将深入探讨这两个概念以及它们...通过实践和学习,你可以掌握这些基础知识,从而在IT领域中取得更大的成就。

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

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

    PHP设置头信息及取得返回头信息的方法

    PHP中设置和获取头信息是网络编程中常见的需求,尤其在网络请求中,正确的设置HTTP头信息对于服务器和客户端之间的数据传输至关重要。本文将详细介绍如何在PHP中通过curl扩展设置请求头信息以及如何获取响应头信息。...

    php初级试题+答案(单选+多选+判断)

    PHP 中,要取得最近一条查询的信息,应该使用函数 mysql_insert_id(),因此,正确答案是 C。 PHP 中,要查看一个结构类型变量的值,可以使用函数 print_r(),因此,正确答案是 D。 PHP 中,哪个变量数组总是...

    php:PHP的PubNub客户端

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

    php中高级常用面试题,php中高级常用知识点面试题

    #### 一、如何取得来访者的IP地址? 在PHP中,获取客户端IP地址可以通过`$_SERVER`全局数组中的多个元素来实现: 1. **`$_SERVER['REMOTE_ADDR']`**:直接获取客户端IP地址。 2. **`$_SERVER['CLIENT_IP']`**:当...

    PHP(50选择题).doc

    exit() 和 die() 函数都是用于终止脚本执行的,但 die() 函数可以显示错误信息。 _PHP 日期时间_ 14. 下面程序运行结果?答案:B、得到今天的日期(年-月-日)与下周的日期(年-月-日)。该代码使用 time() 函数取得...

    PHP 使用技巧集.rar

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

    基于ASP的仿范家屯信息网风格源码 php版 v1.0.zip

    8. **版权问题**:如果“仿范家屯信息网风格”涉及到版权问题,使用这套源码前需确保符合法律法规,尊重原创并取得必要授权。 以上是对这个压缩包文件及相关知识点的详细解析,希望能为理解和使用这套源码提供帮助...

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

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

    良心出品php基础知识期末考试题.doc

    10. 最近一条查询信息:mysql_insert_id() 函数可以用于取得最近一条查询的信息。 11. 结构类型变量:print_r() 函数可以用于查看结构类型变量的值。 12. 客户端 Cookies 数据:$_COOKIE 是一个超全局变量,总是...

    学会PHP(CHM)

    【PHP(CHM)学习指南】 PHP(Hypertext Preprocessor,超文本预处理器)是一种广泛使用的开源脚本语言,尤其适合于Web开发,可以嵌入到HTML中...只要持之以恒,10分钟入门并非不可能,祝你在PHP学习之旅中取得成功!

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

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

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

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

Global site tag (gtag.js) - Google Analytics