Em PHP, existem alguns recursos úteis para se tentar obter o IP do cliente. O processo é feito basicamente observando algumas variáveis guardadas no array superglobal $_SERVER. O maior problema é que o cliente pode estar por trás de um ou mais proxy. A função abaixo tenta obter o IP por diferentes vias:
Linguagem: PHP
Copyright 2010 Rubens Takiguti Ribeiro
Licença: LGPL 3 ou superior
/**
* Tenta Obter o IP real do cliente
* @return string
*/
function get_ip_real() {
static $ip_real = null;
if ($ip_real !== null) {
return $ip_real;
}
if (array_key_exists('HTTP_CLIENT_IP', $_SERVER)) {
$ip = trim($_SERVER['HTTP_CLIENT_IP']);
if (validar_ip($ip)) {
$ip_real = $ip;
return $ip;
}
}
if (array_key_exists('HTTP_X_FORWARDED_FOR', $_SERVER)) {
$ip = trim($_SERVER['HTTP_X_FORWARDED_FOR']);
if (validar_ip($ip)) {
$ip_real = $ip;
return $ip;
} elseif (strpos($ip, ',') !== false) {
$ips = explode(',', $ip);
foreach ($ips as $ip) {
$ip = trim($ip);
if (validar_ip($ip)) {
$ip_real = $ip;
return $ip;
}
}
} elseif (strpos($ip, ';') !== false) {
$ips = explode(';', $ip);
foreach ($ips as $ip) {
$ip = trim($ip);
if (validar_ip($ip)) {
$ip_real = $ip;
return $ip;
}
}
}
}
if (array_key_exists('REMOTE_ADDR', $_SERVER)) {
$ip = trim($_SERVER['REMOTE_ADDR']);
if (validar_ip($ip)) {
$ip_real = $ip;
return $ip;
}
}
$ip_real = '0.0.0.0';
return $ip_real;
}
/**
* Valida um IP v4
* @param string $ip: IP a ser validado
* @return bool
*/
function validar_ip($ip) {
// IPv4
$array = explode('.', $ip);
if (count($array) != 4) {
return false;
}
foreach ($array as $i) {
if (!is_numeric($i) || $i < 0 || $i > 255) {
return false;
}
}
return true;
}
0 comentários
Postar um comentário
Nota: fique a vontade para expressar o que achou deste artigo ou do blog.
Dica: para acompanhar as respostas, acesse com uma conta do Google e marque a opção "Notifique-me".
Atenção: o blogger não permite inclusão de tags nos comentários, por isso, use algum site externo para postar seu código com dúvidas e deixe o link aqui. Exemplo: pastebin.com