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