Pregunta

¿Cuál es la mejor manera de obtener la dirección IP en PHP:

getenv('REMOTE_ADDR'); 

o,

¿Cuál es la mejor manera de obtener la dirección IP en PHP:

getenv('REMOTE_ADDR'); 

o,

<*>

por favor dime la diferencia, si hay alguna, entre los dos.

SERVER['REMOTE_ADDR'];

por favor dime la diferencia, si hay alguna, entre los dos.

¿Fue útil?

Solución

getenv () se puede utilizar para acceder a cualquier variable de entorno (PHP simplemente registra REMOTE_ADDR como una variable de entorno para el script), mientras que con $ _SERVER obviamente solo se accede al contenido de la superglobal $ _SERVER.

El enfoque común es usar $ _SERVER para esto, aunque en realidad no hace una diferencia en cuanto a funcionalidad.

Otros consejos

$ _SERVER es una variable PHP integrada, mientras que getenv () solicita valores al entorno (probablemente Apache / IIS).

La mejor manera de obtener la IP es;

$ip = (!empty(

$ _SERVER es una variable PHP integrada, mientras que getenv () solicita valores al entorno (probablemente Apache / IIS).

La mejor manera de obtener la IP es;

<*>

Pero dudo que haya alguna diferencia entre estas dos variables ... Hm.

SERVER['REMOTE_ADDR'])) ?

$ _SERVER es una variable PHP integrada, mientras que getenv () solicita valores al entorno (probablemente Apache / IIS).

La mejor manera de obtener la IP es;

<*>

Pero dudo que haya alguna diferencia entre estas dos variables ... Hm.

SERVER['REMOTE_ADDR'] : getenv('REMOTE_ADDR');

Pero dudo que haya alguna diferencia entre estas dos variables ... Hm.

Probablemente sería mejor usar   $ _SERVER ['REMOTE_ADDR']; para evitar incompatibilidades entre servidores.

No hay diferencias entre las llamadas. Como puede ver, PHP manual use ambos métodos en el mismo ejemplo. Hay algunos casos en los que no tiene variables globales como $ _SERVER habilitado y se ve obligado a usar getenv (). En mi experiencia, nunca he visto un servidor con variables globales deshabilitadas.

Con $ _SERVER ['REMOTE_ADDR'] puede leer directamente la variable global accediendo a la matriz $ _SERVER [] que se configura cuando ocurre una solicitud remota:

$ _SERVER es una matriz que contiene información como como encabezados, rutas y ubicaciones de script. Las entradas en esta matriz son creadas por el servidor web. No hay garantía de que cada servidor web proporcione ninguno de estos; los servidores pueden omitir algunos o proporcionar otros que no figuran aquí. Dicho esto, una gran cantidad de estas variables se contabilizan en el & # 187; Especificación CGI 1.1, por lo que debería poder esperarlas.

¡La función getenv () accede a cualquier variable de entorno para obtener el valor relacionado!

En ambos casos, accede al mismo valor y la misma variable ... pero $ _SERVER es una construcción en una variable superglobal de PHP, ¡en cambio, getenv () obtiene el valor de una variable definida en el entorno actual!

¡Creo que en este caso el uso de la variable superglobal es la mejor manera de obtener la dirección IP!

Esta publicación está un poco anticuada, así que pensé en compartir cómo obtengo actualmente la dirección IP de la solicitud en mis scripts PHP, ya que esta publicación fue originalmente sobre un mejor forma de obtener una solicitud de IP. Esta es una mejor manera, aunque no es una de las opciones dadas en la publicación original.

Este enfoque utiliza una pequeña biblioteca de funciones para facilitar la portabilidad.

// Function to sanitize IP string
function sanitize_ip($string){
  $string = trim($string); 
  $string = strip_tags($string);
  $string = htmlspecialchars($string, ENT_QUOTES, 'UTF-8');
  $string = str_replace('\n', '', $string);
  $string = trim($string); 
  return $string;
}

// Function to evaluate HTTP headers for IP
function evaluate_ip(){
  $ip_keys =
    array(
      'HTTP_CF_CONNECTING_IP',  'HTTP_CLIENT_IP',            'HTTP_X_FORWARDED_FOR',
      'HTTP_X_FORWARDED',       'HTTP_X_CLUSTER_CLIENT_IP',  'HTTP_X_REAL_IP',
      'HTTP_X_COMING_FROM',     'HTTP_PROXY_CONNECTION',     'HTTP_FORWARDED_FOR',
      'HTTP_FORWARDED',         'HTTP_COMING_FROM',          'HTTP_VIA',
      'REMOTE_ADDR'
    );
  foreach ($ip_keys as $key){
    if (array_key_exists($key, 

Esta publicación está un poco anticuada, así que pensé en compartir cómo obtengo actualmente la dirección IP de la solicitud en mis scripts PHP, ya que esta publicación fue originalmente sobre un mejor forma de obtener una solicitud de IP. Esta es una mejor manera, aunque no es una de las opciones dadas en la publicación original.

Este enfoque utiliza una pequeña biblioteca de funciones para facilitar la portabilidad.

<*>

¡Espero que esto ayude a alguien ahora en 2018!

SERVER) === true){ foreach (explode(',',

Esta publicación está un poco anticuada, así que pensé en compartir cómo obtengo actualmente la dirección IP de la solicitud en mis scripts PHP, ya que esta publicación fue originalmente sobre un mejor forma de obtener una solicitud de IP. Esta es una mejor manera, aunque no es una de las opciones dadas en la publicación original.

Este enfoque utiliza una pequeña biblioteca de funciones para facilitar la portabilidad.

<*>

¡Espero que esto ayude a alguien ahora en 2018!

SERVER[$key]) as $ip){ $ip = trim($ip); $ip = normalize_ip($ip); if (validate_ip($ip)) return $ip; } } } // Build error response HTML $msg = '<div style="width:100%; font-family:serif; font-size:24px; line-height:28px; color:#cc0000; font-weight:bold; text-align:center; padding:10px;"> ERROR:&nbsp;<span style="color:#ffc107">Invalid IP Address</span> </div>'; echo $msg; exit; } // Function to normalize IPv4 and IPv6 addresses with port function normalize_ip($ip){ // IPv4 with port (e.g., 123.123.123.123:80) if (strpos($ip, ':') !== false && substr_count($ip, '.') == 3 && strpos($ip, '[') === false){ $ip = explode(':', $ip); $ip = $ip[0]; } // IPv6 with port (e.g., [::1]:80) else { $ip = explode(']', $ip); $ip = ltrim($ip[0], '['); } return $ip; } // Function to validate IP address function validate_ip($ip){ $options = FILTER_FLAG_IPV4 | FILTER_FLAG_IPV6 | FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE; $filtered = filter_var($ip, FILTER_VALIDATE_IP, $options); if (!$filtered || empty($filtered)){ if (preg_match("/^(([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]).){3}([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$/", $ip)){ return $ip; // IPv4 } elseif (preg_match("/^\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?\s*$/", $ip)){ return $ip; // IPv6 } // Build error response HTML $msg = '<div style="width:100%; font-family:serif; font-size:24px; line-height:28px; color:#cc0000; font-weight:bold; text-align:center; padding:10px;"> ERROR:&nbsp;<span style="color:#ffc107">Invalid IP Address</span> </div>'; echo $msg; exit; } return $filtered; } function get_ip(){ $ip = evaluate_ip(); if (preg_match('/(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})/', $ip, $ip_match)){ $ip = $ip_match[1]; } return sanitize_ip($ip); } // To Use $ip = get_ip(); //

¡Espero que esto ayude a alguien ahora en 2018!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top