Cómo obtener la dirección IP del cliente en PHP: la solución correcta
¡Hola a todos! Soy un desarrollador PHP principiante y me encontré con el problema de obtener la dirección IP real del visitante de mi sitio. Necesito registrar la IP para protección contra spam y análisis.
El problema es que uso $_SERVER['REMOTE_ADDR'], pero cuando el sitio está detrás de Cloudflare o un proxy Nginx, este método devuelve la IP del servidor proxy, no la del usuario real. Probé diferentes opciones, pero todas parecen poco confiables.
Aquí está mi código actual:
```php
$ip = $_SERVER['REMOTE_ADDR'];
if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
$ip = $_SERVER['HTTP_CLIENT_IP'];
} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
}
echo "Tu IP: " . $ip;
```
Pero he oído que los encabezados HTTP se pueden falsificar y un atacante puede enviar una IP falsa. ¿Cómo obtener la IP del cliente de manera correcta y segura? ¿Es necesario considerar que la IP puede ser IPv6? ¿Y qué pasa si el sitio funciona a través de varios proxies?
Agradecería una explicación detallada con ejemplos de código.