Mediante la dirección IP de un visitante de su sitio, puede averiguar mucho sobre él: país, ciudad, nombre y dirección de correo electrónico del proveedor de Internet, etc. Pero el valor principal es que la IP puede servir como una identificación de visitante para los scripts del lado del servidor. A continuación se describe cómo puede determinar la dirección IP usando PHP.
Es necesario
Conocimientos básicos de PHP
Instrucciones
Paso 1
Para extraer la dirección IP de los encabezados enviados al servidor de solicitudes del navegador, use la función getenv. Lee los valores que se le especifican de las variables de entorno. Se utiliza una variable denominada REMOTE_ADDR para almacenar la dirección IP del visitante. Sin embargo, el cliente puede usar un servidor proxy, en cuyo caso la variable contendrá su dirección y no la que usted desea. Puede descubrir que el internauta está utilizando una IP intermedia mirando la variable de entorno llamada HTTP_VIA. Todas las direcciones de los servidores proxy involucrados en la cadena se colocan en ella, separadas por comas. Los servidores intermedios deben colocar la dirección del visitante en una variable llamada HTTP_X_FORWARDED_FOR, pero esto depende completamente de la configuración del proxy. Esto significa que para cubrir tantas posibilidades de determinar la dirección IP como sea posible, debe verificar el contenido de al menos tres variables: REMOTE_ADDR, HTTP_X_FORWARDED_FOR y preferiblemente
Paso 2
Puede combinar la verificación de las tres variables en una línea de código PHP, por ejemplo, así:
$ ipAddr = getenv ('HTTP_CLIENT_IP') o $ ipAddr = getenv ('HTTP_X_FORWARDED_FOR') o $ ipAddr = getenv ('REMOTE_ADDR');
Habiendo obtenido el valor de la dirección IP de esta forma, es recomendable despejarla de posibles distorsiones y caracteres innecesarios. Puede usar una expresión regular para esto:
$ ipAddr = trim (preg_replace ('# ^ ([^,] +) (,. *)? #', '$ 1', $ ipAddr));
Paso 3
Queda por combinar ambas líneas de código en una función:
function getIP () {
$ ipAddr = getenv ('HTTP_CLIENT_IP') o $ ipAddr = getenv ('HTTP_X_FORWARDED_FOR') o $ ipAddr = getenv ('REMOTE_ADDR');
return trim (preg_replace ('# ^ ([^,] +) (,. *)? #', '$ 1', $ ipAddr));
}