46 lines
877 B
PHP
46 lines
877 B
PHP
|
|
<?php namespace App\Utils;
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
*
|
|||
|
|
*/
|
|||
|
|
class IP
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
static public function getip()
|
|||
|
|
{
|
|||
|
|
$ip=FALSE;
|
|||
|
|
|
|||
|
|
//客户端IP 或 NONE
|
|||
|
|
|
|||
|
|
if(!empty($_SERVER["HTTP_CLIENT_IP"])){
|
|||
|
|
|
|||
|
|
$ip = $_SERVER["HTTP_CLIENT_IP"];
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
//多重代理服务器下的客户端真实IP地址(可能伪造),如果没有使用代理,此字段为空
|
|||
|
|
|
|||
|
|
if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
|
|||
|
|
|
|||
|
|
$ips = explode (", ", $_SERVER['HTTP_X_FORWARDED_FOR']);
|
|||
|
|
|
|||
|
|
if ($ip) { array_unshift($ips, $ip); $ip = FALSE; }
|
|||
|
|
|
|||
|
|
for ($i = 0; $i < count($ips); $i++) {
|
|||
|
|
|
|||
|
|
if (!preg_match('#^(10|172\.16|192\.168)\.#', $ips[$i])) {
|
|||
|
|
|
|||
|
|
$ip = $ips[$i];
|
|||
|
|
|
|||
|
|
break;
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//客户端IP 或 (最后一个)代理服务器 IP
|
|||
|
|
|
|||
|
|
return ($ip ? $ip : $_SERVER['REMOTE_ADDR']);
|
|||
|
|
}
|
|||
|
|
}
|