php 获取访问者ip的问题 我用的是$_SERVER['REMOTE_ADDR'] 获取到的ip不正确,而且三个不同地区的人访问ip相同 ip显示为:118.193.199.80 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 /** * 获取客户端IP地址 * @param integer $type 返回类型 0 返回IP地址 1 返回IPV4地址数字 * @return mixed */function get_client_ip($type = 0) { $type = $type ? 1 : 0; static $ip = NULL; if ($ip !== NULL) return $ip[$type]; if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) { $arr = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']); $pos = array_search('unknown',$arr); if(false !== $pos) unset($arr[$pos]); $ip = trim($arr[0]); }elseif (isset($_SERVER['HTTP_CLIENT_IP'])) { $ip = $_SERVER['HTTP_CLIENT_IP']; }elseif (isset($_SERVER['REMOTE_ADDR'])) { $ip = $_SERVER['REMOTE_ADDR']; } // IP地址合法验证 $long = sprintf("%u",ip2long($ip)); $ip = $long ? array($ip, $long) : array('0.0.0.0', 0); return $ip[$type];}用这个封装好的方法获取IP吧 get_client_ip /** * 获取客户端IP地址 * @return string */function get_client_ip() { if(getenv('HTTP_CLIENT_IP')){ $client_ip = getenv('HTTP_CLIENT_IP'); } elseif(getenv('HTTP_X_FORWARDED_FOR')) { $client_ip = getenv('HTTP_X_FORWARDED_FOR'); } elseif(getenv('REMOTE_ADDR')) { $client_ip = getenv('REMOTE_ADDR'); } else { $client_ip = $_SERVER['REMOTE_ADDR']; } return $client_ip; } /*** 获取服务器端IP地址 * @return string */function get_server_ip() { if (isset($_SERVER)) { if($_SERVER['SERVER_ADDR']) { $server_ip = $_SERVER['SERVER_ADDR']; } else { $server_ip = $_SERVER['LOCAL_ADDR']; } } else { $server_ip = getenv('SERVER_ADDR'); } return $server_ip; } $_SERVER['SERVER_ADDR'];才是获取服务器的地址 头信息中没有HTTP_CLIENT_IP HTTP_X_FORWARDED_FOR 头信息中没有HTTP_CLIENT_IP HTTP_X_FORWARDED_FOR 都给你获取的方法了,你为什么不去试试呢?能获取到IP吗?HTTP_CLIENT_IP HTTP_X_FORWARDED_FOR是过滤代理IP获取用户的真实IP地址,你没有使用代理IP当然获取不到此参数。 用gethostip()试试 这是thinkphp里面的吧? 怎么才能把PhpMyadmin的导出功能关闭 PHP数组如何实现交叉表? 请问各位PHPcms到底是什么? PDOException 的输出 求一正则表达式问题. php.ini配置? 如何删除数组中的指定数值? 采取那些措施可以减少Apache死掉呀? Nginx伪静态写法问题 请教各位! 使用php做融云的服务器端的开发 新手学php,用的是Mac,服务器是MAMP,但是不能用mysql_函数,一用就显示“服务器错误500”
* 获取客户端IP地址
* @param integer $type 返回类型 0 返回IP地址 1 返回IPV4地址数字
* @return mixed
*/
function get_client_ip($type = 0) {
$type = $type ? 1 : 0;
static $ip = NULL;
if ($ip !== NULL) return $ip[$type];
if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$arr = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
$pos = array_search('unknown',$arr);
if(false !== $pos) unset($arr[$pos]);
$ip = trim($arr[0]);
}elseif (isset($_SERVER['HTTP_CLIENT_IP'])) {
$ip = $_SERVER['HTTP_CLIENT_IP'];
}elseif (isset($_SERVER['REMOTE_ADDR'])) {
$ip = $_SERVER['REMOTE_ADDR'];
}
// IP地址合法验证
$long = sprintf("%u",ip2long($ip));
$ip = $long ? array($ip, $long) : array('0.0.0.0', 0);
return $ip[$type];
}用这个封装好的方法获取IP吧
/**
* 获取客户端IP地址
* @return string
*/
function get_client_ip() {
if(getenv('HTTP_CLIENT_IP')){
$client_ip = getenv('HTTP_CLIENT_IP');
} elseif(getenv('HTTP_X_FORWARDED_FOR')) {
$client_ip = getenv('HTTP_X_FORWARDED_FOR');
} elseif(getenv('REMOTE_ADDR')) {
$client_ip = getenv('REMOTE_ADDR');
} else {
$client_ip = $_SERVER['REMOTE_ADDR'];
}
return $client_ip;
}
/**
* 获取服务器端IP地址
* @return string
*/
function get_server_ip() {
if (isset($_SERVER)) {
if($_SERVER['SERVER_ADDR']) {
$server_ip = $_SERVER['SERVER_ADDR'];
} else {
$server_ip = $_SERVER['LOCAL_ADDR'];
}
} else {
$server_ip = getenv('SERVER_ADDR');
}
return $server_ip;
}
HTTP_CLIENT_IP HTTP_X_FORWARDED_FOR
是过滤代理IP获取用户的真实IP地址,你没有使用代理IP当然获取不到此参数。