Question

Quel est le meilleur moyen d'obtenir l'adresse IP en PHP:

getenv('REMOTE_ADDR'); 

ou

Quel est le meilleur moyen d'obtenir l'adresse IP en PHP:

getenv('REMOTE_ADDR'); 

ou

<*>

s'il vous plaît dites-moi la différence, le cas échéant, entre les deux.

SERVER['REMOTE_ADDR'];

s'il vous plaît dites-moi la différence, le cas échéant, entre les deux.

Était-ce utile?

La solution

getenv () peut être utilisé pour accéder à toutes les variables d'environnement (PHP enregistre simplement REMOTE_ADDR en tant que variable d'environnement pour le script), tandis qu'avec $ _SERVER vous n'accédez évidemment qu'au contenu du super-global $ _SERVER.

L’approche habituelle consiste à utiliser $ _SERVER pour cela, bien que cela ne fasse pas vraiment de différence en termes de fonctionnalité.

Autres conseils

$ _ SERVER est une variable PHP intégrée, tandis que getenv () demande des valeurs à l'environnement (probablement Apache / IIS).

Le meilleur moyen d'obtenir l'adresse IP est:

$ip = (!empty(

$ _ SERVER est une variable PHP intégrée, tandis que getenv () demande des valeurs à l'environnement (probablement Apache / IIS).

Le meilleur moyen d'obtenir l'adresse IP est:

<*>

Mais je doute qu'il y ait une différence entre ces deux variables ... Hm.

SERVER['REMOTE_ADDR'])) ?

$ _ SERVER est une variable PHP intégrée, tandis que getenv () demande des valeurs à l'environnement (probablement Apache / IIS).

Le meilleur moyen d'obtenir l'adresse IP est:

<*>

Mais je doute qu'il y ait une différence entre ces deux variables ... Hm.

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

Mais je doute qu'il y ait une différence entre ces deux variables ... Hm.

Il serait probablement préférable d'utiliser   $ _SERVER ['REMOTE_ADDR']; pour éviter les incompatibilités entre les serveurs.

Il n'y a pas de différence entre les appels. Comme vous pouvez le voir, le manuel PHP utilise les deux méthodes dans le même exemple. Dans certains cas, les variables globales telles que $ _SERVER ne sont pas activées et vous êtes obligé d'utiliser getenv (). D'après mon expérience, je n'ai jamais vu de serveur avec des variables globales désactivées.

Avec $ _ SERVER ['REMOTE_ADDR'] , vous lisez directement la variable globale en accédant au tableau $ _SERVER [] défini lors de l'exécution d'une requête distante:

$ _SERVER est un tableau contenant des informations telles que comme en-têtes, chemins et emplacements de script. Les entrées de ce tableau sont créées par le serveur Web. Rien ne garantit que chaque serveur Web fournira l’un de ces éléments; les serveurs peuvent en omettre ou en fournir d’autres qui ne sont pas listés ici. Cela dit, un grand nombre de ces variables sont prises en compte dans le champ & # 187; CGI 1.1, vous devriez donc pouvoir vous y attendre.

La fonction getenv () permet d’accéder à n’importe quelle variable d’environnement pour obtenir la valeur associée!

Dans les deux cas, vous accédez à la même valeur et à la même variable ... mais $ _SERVER est une variable PHP superglobale construite, à la place de getenv (), obtenez la valeur d'une variable définie dans l'environnement actuel!

Je pense que dans ce cas, l'utilisation de la variable superglobal est le meilleur moyen d'obtenir l'adresse IP!

Ce billet est un peu démodé. Je pensais donc partager l’adresse IP de la demande dans mes scripts PHP, car il s'agissait à l’origine d’un meilleur moyen d'obtenir une demande IP. C’est une meilleure solution, bien que ce ne soit pas l’un des choix donnés dans le message original.

Cette approche utilise une petite bibliothèque de fonctions pour faciliter la portabilité.

// 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, 

Ce billet est un peu démodé. Je pensais donc partager l’adresse IP de la demande dans mes scripts PHP, car il s'agissait à l’origine d’un meilleur moyen d'obtenir une demande IP. C’est une meilleure solution, bien que ce ne soit pas l’un des choix donnés dans le message original.

Cette approche utilise une petite bibliothèque de fonctions pour faciliter la portabilité.

<*>

J'espère que cela aidera quelqu'un maintenant en 2018!

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

Ce billet est un peu démodé. Je pensais donc partager l’adresse IP de la demande dans mes scripts PHP, car il s'agissait à l’origine d’un meilleur moyen d'obtenir une demande IP. C’est une meilleure solution, bien que ce ne soit pas l’un des choix donnés dans le message original.

Cette approche utilise une petite bibliothèque de fonctions pour faciliter la portabilité.

<*>

J'espère que cela aidera quelqu'un maintenant 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(); //

J'espère que cela aidera quelqu'un maintenant en 2018!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top