2012-01-03 23 views
5

El siguiente código para encontrar la dirección real del IP local (por ejemplo 192.168.1.X) del servidor host se ejecuta bien en una máquina devSimplemente encontrar la dirección IP del servidor de

$ip = getHostByName(getHostName()); 

transferirla a otro servidor que empezó a salida 127.0.0.1

Parece que getHostName() devuelve localhost que a su vez se convierte en 127.0.0.1 por getHostByName().

En cuanto a otras preguntas aquí parecía que $_SERVER['SERVER_ADDR'] podría resolver el puzzle, pero esto también está regresando 127.0.0.1

Comprobación y buscar la salida de phpinfo() no devolvió pistas sobre la dirección IP real de la máquina.

En serio, ¿alguien sabe una forma a prueba de balas (más simple, mejor) de obtener la dirección IP de la máquina que ejecuta el script? ¿Por qué es tan difícil obtener datos tan fundamentales sin hacer retrocesos?

Realmente no quiero estar codificando la dirección IP en un archivo de configuración ...

+0

¿Su servidor se ejecuta detrás de un proxy/loadbalancer/cache en la misma máquina, haciendo 'localhost' o' 127.0.0.1' el host real en el que se está ejecutando * Apache *? –

+0

¿Qué dirección IP desea, las direcciones IP asignadas a la (s) NIC (s) en la máquina o la dirección IP pública que se utilizó para acceder a la máquina desde Internet? – DaveRandom

+0

@nikc no. pero crees que es algo relacionado con apache? – zaf

Respuesta

3

Me temo que, en general, no es posible - la IP real utilizado para conectar el servidor podría traducirse antes de que se llega al servidor ...

+0

Estoy sorprendido con esta revelación. – zaf

3

Si necesita toda la lista de interfaces, intente con system(); para ejecutar el comando de shell y obtener el resultado para el servidor web. Por ejemplo:

system('ifconfig', $LIP); 
system('ipconfig', $WIP); 
echo "Linux:".$LIP."<br>Win:".$WIP."<br>; 
+0

Probablemente use algo como esto. Pero tendré que agregar un mecanismo de caché en la parte superior para evitar ejecutar esto en cada solicitud. – zaf

+1

intente comprobar 'is_file ('/ webroot/sysconfig.txt');' si es falso: use 'system ('ifconfig> /webroot/sysconfig.txt');' si es verdadero: lea sysconfig.txt mediante 'file_get_contents ($ ruta); 'De esta manera Usted puede hacer fácilmente un mecanismo _caching_;) –

+0

Sí, eso sería de una manera :) – zaf

0

Prueba esto:

$ip = getHostByName($_SERVER['HTTP_HOST']); 

Se debe resolver la IP del usuario del host está accediendo sitio.

Por ejemplo, si tiene acceso a su sitio web a través del http://localhost/, obtendrá 127.0.0.1. Pero para http://www.mydomain.tld/ debe devolver el IP para www.mydomain.tld.

Tenga en cuenta que /etc/hosts puede afectar la resolución de nombres si el dominio se encuentra allí.

Cuestiones relacionadas