En esta entrada vamos a ver rápidamente una manera muy común para obtener la dirección IP de un usuario que visite nuestra web.
Encapsularemos el snippet de código en una función de manera que se pueda colocar en alguna parte de la aplicación que sea común a toda ella, y así si es necesario obtener la IP desde diferentes sitios podremos reutilizar la función. A continuación vamos a ver el código y después lo comentaremos.
<?php
function getVisitorIp()
{
// Recogemos la IP de la cabecera de la conexión
if (!empty($_SERVER['HTTP_CLIENT_IP']))
{
$ipAdress = $_SERVER['HTTP_CLIENT_IP'];
}
// Caso en que la IP llega a través de un Proxy
elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR']))
{
$ipAdress = $_SERVER['HTTP_X_FORWARDED_FOR'];
}
// Caso en que la IP lleva a través de la cabecera de conexión remota
else
{
$ipAdress = $_SERVER['REMOTE_ADDR'];
}
return $ipAdress;
}
echo getVisitorIp();
El array global $_SERVER contiene información relativa a las cabeceras, ubicación de script y rutas, y es generada por el servidor. Pero como cada servidor es de su padre y de su madre, es posible que envíen esta información de manera diferente. Vamos a ver por qué.
Generalmente, el servidor nos enviará la dirección IP desde donde está viendo la página el usuario en la variable REMOTE_ADDR, pero en caso de que se encuentre detrás de un proxy esta variable contendrá la IP del proxy, no del cliente.
Afortunadamente, los servidores adjuntan en las cabeceras la dirección IP original del cliente; el problema es que dependiendo del servidor que sea, ésta vendrá en la variable HTTP_CLIENT_IP o en HTTP_X_FORWARDED_FOR.
Así que lo que haremos será ir examinando estas dos variables hasta que encontremos alguna que contenga datos, y en caso que ambas estén vacías cogeremos la variable por defecto, REMOTE_ADDR.