在PHP中如何获取用户的真实IP
/**
* 获得用户的真实IP地址
*
* @access public
* @return string
*/
function real_ip()
{
static $realip = NULL; if ($realip !== NULL)
{
return $realip;
} if (isset($_SERVER))
{
if (isset($_SERVER['HTTP_X_FORWARDED_FOR']))
{
$arr = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']); /* 取X-Forwarded-For中第一个非unknown的有效IP字符串 */
foreach ($arr AS $ip)
{
$ip = trim($ip); if ($ip != 'unknown')
{
$realip = $ip; break;
}
}
}
elseif (isset($_SERVER['HTTP_CLIENT_IP']))
{
$realip = $_SERVER['HTTP_CLIENT_IP'];
}
else
{
if (isset($_SERVER['REMOTE_ADDR']))
{
$realip = $_SERVER['REMOTE_ADDR'];
}
else
{
$realip = '0.0.0.0';
}
}
}
else
{
if (getenv('HTTP_X_FORWARDED_FOR'))
{
$realip = getenv('HTTP_X_FORWARDED_FOR');
}
elseif (getenv('HTTP_CLIENT_IP'))
{
$realip = getenv('HTTP_CLIENT_IP');
}
else
{
$realip = getenv('REMOTE_ADDR');
}
} preg_match("/[\d\.]{7,15}/", $realip, $onlineip);
$realip = !empty($onlineip[0]) ? $onlineip[0] : '0.0.0.0'; return $realip;
}
如果大家还有别的方式的话,可以一起交流哦。
下面再给大家一些常用的PHP函数,以后说不定能用上哦。
<?php
class common {
/* * 获取服务器的时区 */ function server_timezone(){ if(function_exists('date_default_timezone_get')){ return date_default_timezone_get(); }else{ return date('Z')/3600; } } /* * 获取字符串的长度 */ function str_len($str){ $length = strlen(preg_replace('/[\x00-\x7F]/','',$str)); if($length){ return strlen($str)-$length + intval($length/3)*2; }else{ return strlen($str); } } /* * 截取字符串 * $str 将要截取的字符换 * $length 截取字符串的长度 * $append 是否添加省落号 默认是 */ public function sub_str($str,$length=0,$append = true){ $str = trim($str); $strlength = strlen($str); if($length == 0 || $length >= $strlength){ return $str; }elseif( $length < 0){ $length = $length + $strlength; if($length < 0){ $length = $strlength; } } if(function_exists("mb_substr")){ $newstr = mb_substr($str,0,$length,"gb2312"); }elseif (function_exists('iconv_substr')){ $newstr = iconv_substr($str, 0, $length, "gb2312"); }else { $newstr = substr($str, 0, $length); } if ($append && $str != $newstr){ $newstr .= '...'; } return $newstr; } /*获得当前格林威治时间的时间戳 * @return integer */ function getTime(){ return (time() - date("Z")); } /* * 创建像这样的查询条件 in('',''); */ function db_create_in($itme_list,$feild_name){ if(empty($itme_list)){ return $feild_name."IN('')"; }else{ if(!is_array($feild_name)){ $itme_list = explode(",",$itme_list); } $itme_list = array_unique($itme_list); $itme_list_tmp =""; foreach($itme_list as $item){ if(!$item($item)){ $itme_list_tmp .= $itme_list_tmp?",'$item'":"'$item'"; } } if(empty($itme_list_tmp)){ return $feild_name."IN('')"; }else{ return $feild_name."IN('.$itme_list_tmp.')"; } }
} /* * 检查时间的格式是否正确 */ function is_time($time){ $pattern = '/[\d]{4}-[\d]{1,2}-[\d]{1,2}\s[\d]{1,2}:[\d]{1,2}:[\d]{1,2}/'; return preg_match($pattern,$time); } } ?>
在PHP中如何获取用户的真实IP的更多相关文章
- 获取用户的真实ip
常见的坑有两个: 一.获取的是内网的ip地址.在nginx作为反向代理层的架构中,转发请求到php,java等应用容器上.结果php获取的是nginx代理服务器的ip,表现为一个内网的地址.php获取 ...
- 深入nginx之《获取用户的真实IP》
获取用户的真实IP Nginx会将客户端的IP信息存放在$remote_addr变量里,但这并不意味着它就是客户端的IP,生产环境往往会充满各种代理,让IP的来龙去脉变得扑朔迷离. 目前互联网公司基本 ...
- PHP获取用户的真实IP地址
本文出至:新太潮流网络博客 PHP获取用户的真实IP地址,非代理IP function getClientIP(){ global $ip; if(getenv("HTTP_CLIENT_I ...
- Nginx 反向代理时获取用户的真实 IP
在平时我们开发后端程序的过程中,应该多多少少都会碰到记录客户端 IP 的场景,例如我之前写过的 APP 用户的一个审计功能,就需要获取用户的 IP 地址:还有广告系统里面,也是需要获取用户的 IP 地 ...
- 如何获取用户的真实IP
在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的.但是在通过了 Apache,Nagix等反向代理软件就不能获取到客户端的真实 ...
- 怎么使用PHP获取用户客户端真实IP的解决方案呢?
function getIp(){if (getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIE ...
- PHP获取用户客户端真实IP的解决方案是怎样呢?
function getIp(){if (getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIE ...
- PHP获取用户的真实IP地址,非代理IP
function getClientIP(){ global $ip; if(getenv("HTTP_CLIENT_IP")){ $ip = getenv("HTTP_ ...
- F5后端nginx+tomcat应用如何获得用户的真实ip【转】
根据业务需要要求记录每个通过wap或者客户端访问我们服务器的用户真实ip但是由于业务前端部署了两个3900系列的F5设备导致程序一直获得F5设备自身的ip,所以笔者考虑可能是因为F5导致无法获得用户的 ...
随机推荐
- Unity3D 游戏开发应用篇——每日登陆(持久化类实现)
上一篇中我们实现用本地文件实现了持久化类的保存,当然小型数据用PlayerPrefs存储,或者采用XML服务器持久化也行.因为我涉及的角色类和玩家类数据比较多,加上项目要求尽量少与服务器交互,所以采用 ...
- Using command-line Subversion to access project source files
Help index About source code version control with Software Configuration Management (Subversion) Usi ...
- [转载]Spring Annotation Based Configuration
Annotation injection is performed before XML injection, thus the latter configuration will override ...
- POJ3080Blue Jeans
http://poj.org/problem?id=3080 题意 : 给你几个DNA序列,让你找他们的共同的最长的子串,若是子串长度小于3,就输出no significant commonaliti ...
- Android 虚拟机安装SD卡
在cmd命令行下,进入platform-tools目录下. 1.创建sdcard mksdcard -l mycard 256M E:\android\myCards\mysdcard.img ...
- http://www.aboutyun.com/thread-8792-1-1.html
http://www.aboutyun.com/thread-8792-1-1.html
- cojs QAQ的矩阵 题解报告
题目描述非常的清晰 首先我们考虑(A*B)^m的求法,这个部分可以参考BZOJ 杰杰的女性朋友 我们不难发现(A*B)^m=A*(B*A)^(m-1)*B A*B是n*n的矩阵,而B*A是k*k的矩阵 ...
- 用DateTime.ToString(string format)输出不同格式的日期
http://www.cnblogs.com/xvqm00/archive/2009/02/19/1394093.html DateTime.ToString()函数有四个重载.一般用得多的就是不带参 ...
- Ossec常用命令
启动并查看httpd服务 systemctl start httpd systemctl status httpd.service 启动并查看mysql服务 systemctl start maria ...
- 2、@RequestMapping注解的用法
@RequestMapping有如下属性值: