function getIp()
{
$realip = NULL;
if(isset($_SERVER['HTTP_X_FORWARDED_FOR']))
{
$ipArray = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
foreach($ipArray as $rs)
{
$rs = trim($rs);
if($rs != 'unknown')
{
$realip = $rs;
break;
}
}
}
else if(isset($_SERVER['HTTP_CLIENT_IP']))
{
$realip = $_SERVER['HTTP_CLIENT_IP'];
}
else
{
$realip = $_SERVER['REMOTE_ADDR'];
} preg_match("/[\d\.]{7,15}/", $realip, $match);
$realip = !empty($match[0]) ? $match[0] : '0.0.0.0';
return $realip;
}

HTTP_X_FORWARDED_FOR:浏览当前页面的用户计算机的网关

如果用户是通过代理服务器浏览的 那么使用REMOTE_ADDR获取的IP地址是代理服务器的地址 而不是客户端的IP地址

使用HTTP_X_FORWARDED_FOR可以透过代理服务器来获取客户端的IP地址。

如果客户端并没有通过代理服务器来浏览当前页面,那么使用HTTP_X_FORWARDED_FOR获取的IP地址是空的.

HTTP_CLIENT_IP:客户端的IP.

REMOTE_ADDR :浏览当前页面的用户计算机的IP地址。

补充

打印客户端IP:echo $_SERVER[‘REMOTE_ADDR’]; 或者: getenv('REMOTE_ADDR');
打印服务器IP:echo gethostbyname("www.bolaiwu.com")

获取访问者的IP地址的更多相关文章

  1. 获取访问者真实ip地址?我觉得不可能

    我们真的能通过请求来获取用户真实的ip地址嘛? 答案是不能,如果能,肯定是我学的不够深入,欢迎交流指正. 那么写这篇文章的意义是什么?我们接着往下看. IP地址相当于电脑在网络上的身份证,但事实上IP ...

  2. 获取客户端真实IP地址

    Java-Web获取客户端真实IP: 发生的场景:服务器端接收客户端请求的时候,一般需要进行签名验证,客户端IP限定等情况,在进行客户端IP限定的时候,需要首先获取该真实的IP. 一般分为两种情况: ...

  3. 伪造IP及获取客户端真实IP地址

    Fiddler支持自定义规则,可以实现对HTTP请求数据发送给Server前或HTTP应答数据发送给浏览器前进行修改.下面的例子将演示如何向所有HTTP请求数据中增加一个头.1)打开Fiddler,点 ...

  4. 获取本地的IP地址(内网)

    方法一 public static String getLocalIpAddress() { try { for (Enumeration<NetworkInterface> en = N ...

  5. 获取本机IP地址

    这里有两种方法: //获取本机IP - (NSString *)localIPAddress { NSString *localIP = nil; struct ifaddrs *addrs; ) { ...

  6. 关于是用dotnet获取本机IP地址+计算机名的方法

    印象中在maxscript帮助文档里找到过方法,但是当时没记下来.只能通过dotnet实现了. 如果电脑有无线网卡和本地连接,可能会出现乱码,也问了写dotnet的朋友,提供了一些思路,不过最终还是使 ...

  7. 【知识积累】服务器端获取客户端的IP地址(当客户端调用由Axis开发的WebService)

    一.前言 由于项目中一个小的模块需要获取客户端的IP地址以保证安全调用webservice接口,项目中客户端使用C#编写,服务器端使用Java编写,服务器端与客户端采用Axis开发的WebServic ...

  8. CDN下nginx获取用户真实IP地址

    随着nginx的迅速崛起,越来越多公司将apache更换成nginx. 同时也越来越多人使用nginx作为负载均衡, 并且代理前面可能还加上了CDN加速,但是随之也遇到一个问题:nginx如何获取用户 ...

  9. Windows下获取本机IP地址方法介绍

    Windows下获取本机IP地址方法介绍 if((hostinfo = gethostbyname(name)) != NULL) { #if 1 ; printf("IP COUNT: % ...

随机推荐

  1. trinitycore 魔兽服务器源码分析(二) 网络

    书接上文 继续分析Socket.h SocketMgr.h template<class T>class Socket : public std::enable_shared_from_t ...

  2. python参数

    1.形参变量和实参 形参变量:只有在被调用时才分配内存单元,在调用结束时,即释放所分配的内存单元,因此,形参只在函数内有效,函数调用结束返回主调用函数后则不能再使用该形参变量. 实参:可以是常量,变量 ...

  3. 学习爬虫Scrapy遇到的错误

    1. 这个问题是由于路径中含有中文,导致编码格式出错的问题, 查看错误方法,进入到ntpath.py文件中去,找到85行,然后,print 一下result_path,因为后面报出的错误,就是因为这段 ...

  4. Linux 第七天

    软件包管理 1.软件包分类 1)源码包(脚本安装包) 优点: l  开源,如果有足够的能力,可以修改源代码 l  可以自由选择所需的功能 l  软件是编译安装,所以更加适合自己的系统,更加稳定也效率更 ...

  5. C#字符串操作方法签名等

    class Program { /// <summary> /// C# 里Main方法不需要public,而且不允许有两个是Main(string[] args)[包括String[] ...

  6. Linux(以centos7为例)下自动挂载NTFS硬盘

    Linux(以centos7为例)下自动挂载NTFS硬盘 作者:子敬叔叔 编写时间:2017年5月3日星期三 需求:     为了熟悉Linux的使用,在自己的笔记本上新安装一个centos7, 但我 ...

  7. Build.gradle的详细配置说明

    转自:http://blog.csdn.net/u012246458/article/details/51722624 apply plugin: 'com.android.application'/ ...

  8. git cmd 命令在已有的仓库重新添加新的文件夹

    正确步骤: 1. git init //初始化仓库 git add .(文件name) //添加文件到本地仓库 git commit -m “first commit” //添加文件描述信息 git ...

  9. fork()函数、进程表示符、进程位置

    linux.centos6.5 fork()函数:作用于创建子进程.返回值有两个,一个是向父进程返回它的pid,一个是返回0: eg1: #include<stdio.h> #includ ...

  10. [UWP] 用 AudioGraph 来增强 UWP 的音频处理能力

    Audio Graph AudioGraph 是 Windows.Media.Audio 命名空间下提供的音频处理接口之一. 可以通过 AudioGraph 的静态方法 CreateAsync 来实例 ...