PHP获取客户端的IP、地理信息、浏览器、本地真实IP
<?php
header("Content-type:text/html;charset=utf-8");
// 作用获取客户端的ip、地理信息、浏览器、本地真实IP
class get_gust_info {
//获得访客浏览器类型
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';
}elseif (preg_match('/QQBrowser/i',$br)) {
$br = 'QQBrowser';
}elseif (preg_match('/UCBrowser/i',$br)) {
$br = 'UCBrowser';
}else {
$br = 'Other';
}
return $br;
}else {
return false;
}
}
//获得访客浏览器语言
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 false;
}
}
//获取访客操作系统
function GetOs(){
if(!empty($_SERVER['HTTP_USER_AGENT'])) {
$OS = $_SERVER['HTTP_USER_AGENT'];
if (strpos($OS, 'Android') !== false) {//strpos()定位出第一次出现字符串的位置,这里定位为0
preg_match("/(?<=Android )[\d\.]{1,}/", $OS, $version);
$OS ='Android '.$version[0];
}elseif (strpos($OS, 'iPhone') !== false) {
preg_match("/(?<=CPU iPhone OS )[\d\_]{1,}/", $OS, $version);
$OS = 'iPhone iOS '.str_replace('_', '.', $version[0]);
}elseif (strpos($OS, 'iPad') !== false) {
preg_match("/(?<=CPU OS )[\d\_]{1,}/", $OS, $version);
$OS = 'iPad iOS '.str_replace('_', '.', $version[0]);
}elseif (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 false;
}
}
//获得访客真实ip
function Getip() {
$ip = false;
if (getenv("HTTP_CLIENT_IP")) {
$ip = getenv("HTTP_CLIENT_IP");
}elseif (getenv("HTTP_X_FORWARDED_FOR")) {
$ip = getenv("HTTP_X_FORWARDED_FOR");
}elseif (getenv("REMOTE_ADDR")) {
$ip = getenv("REMOTE_ADDR");
}
return $ip;
}
//根据ip获得访客所在地地名
function Getaddress($ip='') {
if(empty($ip)) {
$ip = $this->Getip();
}
$ipadd = file_get_contents("http://int.dpool.sina.com.cn/iplookup/iplookup.php?ip=".$ip);//根据新浪api接口获取
if($ipadd) {
$charset = iconv("gbk","utf-8",$ipadd);
preg_match_all("/[\x{4e00}-\x{9fa5}]+/u",$charset,$ipadds);
return $ipadds; //返回一个二维数组
}else {
return "address is none";
}
}
}
$gifo = new get_gust_info();
echo "浏览器类型:".$gifo->GetBrowser().'<br>';
echo "浏览器语言:".$gifo->GetLang().'<br>';
echo "操作系统:".$gifo->GetOs().'<br>';
echo "你的ip:".$gifo->getIP().'<br>';
echo "所在地:";
$address = $gifo->Getaddress($gifo->getIP());
foreach ($address[0] as $key) {
echo $key.' ';
}
?>
PHP获取客户端的IP、地理信息、浏览器、本地真实IP的更多相关文章
- php 获取客户端的ip、地理信息、浏览器信息、本地真实ip
转自:http://www.blhere.com/948.html 这是非常实用的php常用类.获取客户端的ip.地理信息.浏览器信息.本地真实ip 1234567891011121314151617 ...
- PHP利用纯真IP数据库在本地实现IP地址信息查询
https://blog.csdn.net/myweishanli/article/details/45098693 准备工作: 建议本地IP地址数据库,请到http://www.cz88.net/这 ...
- .NET 获取客户端的操作系统版本、浏览器版本和IP地址
我们在使用.NET做网站的时候,很多情况下需要需要知道客户端的操作系统版本和浏览器版本,怎样获取客户端的操作系统和浏览器版本呢?我们可以通过分析UserAgent来获取. .NET 获取客户端的操作系 ...
- PHP获取客户端操作系统,浏览器,语言,IP,IP归属地等
<?php class Client { ////获得访客浏览器类型 function Get_Browser(){ if(!empty($_SERVER['HTTP_USER_AGENT']) ...
- asp.net获取客户端IP方法(转载)
最近web获取客户端ip,看到下面这篇文章,转载过来,一起分享(转载地址:http://www.cnblogs.com/yejun/archive/2008/02/26/1082485.html) 通 ...
- 再论 ASP.NET 中获取客户端IP地址
说到IP获取无非是我们常见的以下几种方式,但是具体获取的值具体区别在哪?网上不乏相关文章,说的也是很详细,但是真正使用起来,还有很多不太对的地方.IP在不同系统中,应用相当广泛,常见的日志记录.广告分 ...
- java nginx等代理或网关转发请求后获取客户端的ip地址,原理
在没有网关或者反向代理软件情况下,java里获取客户端ip地址的方法是request.getRemoteAddr() 先解释下http协议和TCP协议: 网页默认是进行http连接了,http协议即超 ...
- C#获取客户端IP地址
客户端ip:Request.ServerVariables.Get("Remote_Addr").ToString();客户端主机名:Request.ServerVariables ...
- 【整理】PHP获取客户端真实IP地址详解
php获取客户端IP地址有四种方法,这五种方法分别为REMOTE_ADDR.HTTP_CLIENT_IP.HTTP_X_FORWARDED_FOR.HTTP_VIA. REMOTE_ADDR 是你的客 ...
随机推荐
- LeetCode第[88]题(Java):Merge Sorted Array(合并已排序数组)
题目:合并已排序数组 难度:Easy 题目内容: Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as ...
- 【Python】模块学习之ConfigParser读写配置信息
前言 使用配置文件可以在不修改程序的情况下,做到对程序功能的定制.Python 使用自带的configParser模块可以很方便的读写配置文件的信息. configParser 支持的方法 Confi ...
- tensorflow wide deep 介绍
https://blog.csdn.net/heyc861221/article/details/80131369 https://blog.csdn.net/heyc861221/article/d ...
- atom的初次尝试,activate-power-mode 插件和做gif
编辑器是github 和sublime 的综合,作为一个经常逛github的人,还很喜欢sublime的开发,还有什么好不尝试的理由呢. 好吧,我承认,编辑器有很多,但是像它那样炫酷的很少,作为喜欢一 ...
- Android------第一次启动出现白屏或者黑屏
APP开发中,第一次运行启动app时,会出现一会儿的黑屏或者白屏才进入Activity的界面显示. 当打开一个Activity时,如果这个Activity所属Application还没有在运行, 系统 ...
- 设计模式--抽象工厂模式C++实现
抽象工厂模式C++实现 1定义 为创建一组相关或者依赖的对象提供一个接口,且无需指定他们的具体类 2类图 3实现 class AbstractProduct { protected: Abstract ...
- java7与java8的新特性
java7 新特性: 1. switch 里面的 case 条件可以使用字符串了. 2. 运用 List\tempList = new ArrayList<>(); 即泛型实例化类型自动判 ...
- 闲话__stdcall, __cdecl, __fastcall出现的历史背景以及各自解决的问题
可以认为最先由微软搞出来了__stdcall, 其实就是和WINAPI的声明是一样的,入栈顺序是从右到左,函数返回时,会进行出栈操作. PASCAL语言是非常古老的编程语言,在C语言之前,因此在当时的 ...
- office套件
一.PDF模块 使用PyPDF2模块 pip install PyPDF2 1.1 从PDF读取数据 直接读取,并打印出来.但是这种打印存在一个问题,不能中文字符 import PyPDF2 impo ...
- C++复习4.函数设计基础
C/C++ 函数设计基础 20130918 函数式程序的基本功能单元,是模块化程序设计的基础,即使函数的功能正确是不够的,因为函数设计的细微缺点很容易导致函数被错用. 了解函数的基本知识,堆栈和堆的相 ...