在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导致无法获得用户的 ...
随机推荐
- json 基础
json格式 JSON格式:http://www.json.org/ python和JSON的关系请参考:http://docs.python.org/library/json.html JSON建构 ...
- SilverLight页面跳转(转载)
// Silverlight页面的跳转 // (Application.Current.RootVisualasIContent).Content=newDragControl(); //Silver ...
- POJ 1363 Rails(栈)
思路:将出车站的顺序存入数组train,由于入车站的顺序是固定的,为1~N,所以用P表示进站的车,初始为1. 接下来举例说明吧: 原来入站顺序: 1 2 3 4 5 读入的出战顺序: 3 4 2 ...
- hdu 1270 小希的数表
思路:一定有sum[1]=num[1]+num[2],sum[2]=num[1]+num[3]; 但是sum[3]不知道是由num[1]+num[4]还是num[2]+num[3],这就需要枚举一下了 ...
- spring中的aware接口
1.实现了相应的aware接口,这个类就获取了相应的资源. 2.spring中有很多aware接口,包括applicationContextAware接口,和BeanNameAware接口. 实现了这 ...
- 233. Number of Digit One
题目: Given an integer n, count the total number of digit 1 appearing in all non-negative integers les ...
- Java API —— 反射
1.类加载器 1)类的加载 · 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三步来实现对这个类进行初始化. · 加载 :就是 ...
- LTDFZ
开关稳压器
- WCf的理解
从 .NET 3.5 开始 WCF 已经支持用 WebHttpBinding 构建 RESTful Web 服务,基于 WCF 框架的 RESTful Web 服务还是建立在 WCF Message ...
- Oracle Gateways透明网关访问SQL Server
自己的本机安装了Oracle 12c,公司的平台需要同时支持Oracle与SQL Server,很多时候都有将数据从Oracle同步到SQL Server的需求.通过SQL Server的link S ...