2010-09-13 12 views
33

Necesito recuperar la IP de un usuario. Mi servidor local está devolviendo ::1 como IP. Tengo curiosidad, si esto es un comportamiento esperado? Estoy ejecutando MAMP en Snow Leopard.¿Debería un MAMP devolver :: 1 como IP en localhost?

+0

posible duplicado de [PHP $ _SERVER \ ['REMOTE_HOST' \] returns :: 1] (http://stackoverflow.com/questions/2482033/php-serverremote-host-returns-1) –

Respuesta

37

La misma pregunta, y encontró una solución válida, probada, funciona bien. Quería tener ip addy - de 127.0.0.1 también en lugar de tener que aceptar the :: 1 y debatir sobre los problemas de IPv4/6. Por lo tanto, controlada por unos momentos y cayó sobre un comentario 2008 hecha por @Brad - aquí: http://board.issociate.de/thread/489575/SERVERquotREMOTEADDRquot-returning-1.html

Resumir - (Mac OS - León de la Montaña, en particular)

sudo vi /etc/apache2/httpd.conf

Encuentra donde Apache es el 'listen'-ción a las ips/puertos, etc ... que normalmente será una línea con este aspecto

Listen 80

Hacer que se vea así:

Listen 127.0.0.1:80

volver a guardarlo. Reinicie Apache. Voila!

Ahora $_SERVER[REMOTE_ADDR] se verá así 127.0.0.1.

Espero que ayude a alguien.

+1

"Escucha 127.0.0.1:80" quieres decir :) –

+1

Buena captura, corregida, gracias @Ivo :). –

+3

De esta forma está deshabilitando la compatibilidad con IPv6 para Apache. Puedes arreglarlo de otra manera: agrega '' 127.0.0.1 localhost'' al archivo hosts, por lo que la resolución IPv4 se prioriza sobre IPv6 para localhost;) –

31

::1 es el equivalente en IPv6 de la dirección IPv4 127.0.0.1.

Puede convertir la dirección IPv6 a la dirección IPv4 utilizando la función inet_ntop() como Adam, dijo.

http://php.net/manual/en/function.inet-ntop.php

+1

Creo que puede Convierte entre IPv4 e IPv6 usando 'inet_ntop' –

+0

@adam, sí, tienes razón. @Mild: si está satisfecho con mi respuesta, acepte;] –

+1

$ ip = inet_ntop ($ _ SERVER ['REMOTE_ADDR']); está regresando Advertencia: inet_ntop() [function.inet-ntop]: Valor in_addr no válido en /Applications/MAMP/htdocs/createstudios/wp-content/themes/createstudios/page.php en la línea 18 –

0

tendrá que desactivar el soporte IPv6 en su sistema operativo para Apache para detener la presentación de estas direcciones IPv6 formato, cuando se desea el formato IPv4. Inhabilité la compatibilidad con IPv6 y está funcionando como se espera ahora.

Hace poco me encontré con este problema, aunque nunca recuerdo haber habilitado la compatibilidad con ipv6 en mi sistema Windows 7, podría hacerlo Microsoft en una de sus actualizaciones (tal vez).

+0

Creo que IPv6 se ha habilitado por defecto desde Windows XP SP2 o incluso antes. –

2

para que no haya reslove este problema que parece que el archivo hosts no se encuentra o la línea

127.0.0.1  localhost 

en etc\hosts LINUX

en /private/etc/hosts dispositivos MAC

en \%WINDIR%\system32\drivers\etc\hosts Windows XP/Vista/7/8/

cuando se elimina el archivo hosts o missed o la línea demasiado la IPV6 se establecerá por default ...

4

la modificación del /etc/apache2/httpd.conf o incluso /private/etc/hosts no es la solución.Devuelve :: 1 porque es el equivalente de IPv6 a IPv4 anterior (pero oro) 127.0.0.1. Como se define en el /privates/etc/hosts, cada vez que accede al http://localhost asume IPv6 :: 1. Entonces es el comportamiento esperado.

Una solución alternativa sería acceder directamente al http://127.0.0.1. Funcionará bien. Pero recuerde que la disponibilidad de IPv6 está aumentando. Puede asegurarse de que su servidor (después de la implementación) solo responda a IPv4, pero a mediano plazo, si su sitio/aplicación web no maneja tanto IPv4 como IPv6 correctamente, existe una gran posibilidad de que algo salga mal dentro de 1/2 año. O antes, nunca lo sabremos.

Cuestiones relacionadas