2011-06-25 16 views
5

suponiendo que PHP se ejecuta en modo web a través de cgi/mod_php/etc ...

es seguro asumir que $ _SERVER [ 'REMOTE_ADDR'] existirá, y más aún, que contendrá una correcta estilizada (lo siento, la terminología puede estar aquí ...) ip (1.1.1.1 -> 255.255.255.255?)?

esto no es una pregunta con respecto al clima, la ip contenida dentro de $ _SERVER ['REMOTE_ADDR'] será una verdadera ip del cliente que realiza la solicitud, ya que entiendo que esto puede ser 'falso' modificando el tcp de salida paquetes ...

simplemente:

a) $ se _SERVER [ 'REMOTE_ADDR'] siempre existen si PHP está corriendo en modo web. b) si $ _SERVER ['REMOTE_ADDR'] siempre existe, ¿siempre contendrá una IP correctamente sintaxis?

gracias.

+0

Buena pregunta: creo que la respuesta es "sí" en ambos casos, pero no estoy totalmente seguro acerca de [IPV6] (http://en.wikipedia.org/wiki/IPV6). Por curiosidad, ¿por qué necesitas saber? ¿En qué punto te meterías en problemas si no fuera * una * IP con el formato correcto? –

+0

simplemente revisando el código que se ha estado ejecutando (funcionando, bien) durante años, pero ha estado validando esta información a través de: isset ($ _ SERVER ....) +^([1-9] | [1-9] [0-9] | 1 [0-9] [0-9] | 2 [0-4] [0-9] | 25 [0-5]) (\. ([0-9] | [1- 9] [0-9] | 1 [0-9] [0-9] | 2 [0-4] [0-9] | 25 [0-5])) {3}^ esto parece ser completamente innecesario –

+0

en cuanto a la compatibilidad con ipv6 ... ipv6 está deshabilitado en el cuadro que ejecuta este código, por lo que estaban bien (por el momento) en ese frente ... ¡gracias de nuevo! –

Respuesta

6

Sí, siempre está presente en modo web, y como la dirección IP se convierte de su representación binaria al formato textual que está viendo, siempre es válido –. No hay forma de especificar una dirección IP no válida en el Encabezado IP

Una cosa más: no asuma ningún formato especial a menos que deba ocuparse absolutamente de las direcciones IP. Por ejemplo, las direcciones IPv6 son más largas y contienen diferentes caracteres. Básicamente, trata las direcciones IP como una cadena opaca.

+0

¡gracias amablemente! –

+0

Soy consciente de que esto tiene más de un año. Pero, ejecuto un servidor que usa ip2long para almacenar información sobre cada visita en una base de datos. Mi código es '$ ip = ip2long ($ _ SERVER ['REMOTE_ADDR'])', y he encontrado que $ ip es igual a 0. ¿Por qué sucedería eso? – Kayla

+0

No importa mi último comentario. Mi base de datos no aceptaba números negativos. ** Tenga en cuenta que ip2long puede devolver un resultado negativo. ** – Kayla

Cuestiones relacionadas