Domanda

Qual è il modo migliore per ottenere l'indirizzo IP in PHP:

getenv('REMOTE_ADDR'); 

o

Qual è il modo migliore per ottenere l'indirizzo IP in PHP:

getenv('REMOTE_ADDR'); 

o

<*>

per favore dimmi la differenza, se presente, tra i due.

SERVER['REMOTE_ADDR'];

per favore dimmi la differenza, se presente, tra i due.

È stato utile?

Soluzione

getenv () può essere usato per accedere a qualsiasi variabile d'ambiente (PHP registra semplicemente REMOTE_ADDR come variabile d'ambiente per lo script), mentre con $ _SERVER ovviamente accedi solo al contenuto del superglobal $ _SERVER.

L'approccio comune è usare $ _SERVER per questo, anche se non fa davvero la differenza in termini di funzionalità.

Altri suggerimenti

$ _SERVER è una variabile PHP integrata, mentre getenv () chiede all'ambiente (probabilmente Apache / IIS) valori.

Il modo migliore per ottenere l'IP è;

$ip = (!empty(

$ _SERVER è una variabile PHP integrata, mentre getenv () chiede all'ambiente (probabilmente Apache / IIS) valori.

Il modo migliore per ottenere l'IP è;

<*>

Ma dubito che ci sia differenza tra queste due variabili ... Hm.

SERVER['REMOTE_ADDR'])) ?

$ _SERVER è una variabile PHP integrata, mentre getenv () chiede all'ambiente (probabilmente Apache / IIS) valori.

Il modo migliore per ottenere l'IP è;

<*>

Ma dubito che ci sia differenza tra queste due variabili ... Hm.

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

Ma dubito che ci sia differenza tra queste due variabili ... Hm.

Probabilmente sarebbe meglio usarlo   $ _SERVER [ 'REMOTE_ADDR']; per prevenire incompatibilità tra server.

Non ci sono differenze tra le chiamate. Come puoi vedere manuale di PHP usa entrambi i metodi nello stesso esempio. Ci sono alcuni casi in cui non hai variabili globali come $ _SERVER abilitate e sei costretto a usare getenv (). Nella mia esperienza non ho mai visto un server con variabili globali disabilitate.

Con $ _SERVER ['REMOTE_ADDR'] leggi direttamente la variabile globale accedendo all'array $ _SERVER [] che viene impostato quando si verifica una richiesta remota:

$ _SERVER è un array che contiene informazioni come come intestazioni, percorsi e posizioni degli script. Le voci in questo array sono create dal server web. Non vi è alcuna garanzia che ogni server Web fornirà uno di questi; i server possono ometterne alcuni o fornire altri non elencati qui. Detto questo, un gran numero di queste variabili sono considerate nella specifica »CGI 1.1, quindi dovresti aspettarti quelle.

La funzione getenv () accede a qualsiasi variabile d'ambiente per ottenere il relativo valore!

In entrambi i casi si accede allo stesso valore e alla stessa variabile ... ma $ _SERVER è una variabile superglobale PHP, invece getenv () ottiene il valore di una variabile definita nell'ambiente attuale!

Penso che in questo caso l'uso della variabile superglobal sia il modo migliore per ottenere l'indirizzo IP!

Questo post è un po 'datato, quindi ho pensato di condividere come sto attualmente ricevendo l'indirizzo IP della richiesta nei miei script PHP, dato che questo post originariamente riguardava un migliore modo per ottenere una richiesta IP. Questo è un modo migliore, sebbene non sia una delle scelte fornite nel post originale.

Questo approccio utilizza una piccola libreria di funzioni per facilitare 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, 

Questo post è un po 'datato, quindi ho pensato di condividere come sto attualmente ricevendo l'indirizzo IP della richiesta nei miei script PHP, dato che questo post originariamente riguardava un migliore modo per ottenere una richiesta IP. Questo è un modo migliore, sebbene non sia una delle scelte fornite nel post originale.

Questo approccio utilizza una piccola libreria di funzioni per facilitare la portabilità.

<*>

Spero che questo possa aiutare qualcuno ora nel 2018!

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

Questo post è un po 'datato, quindi ho pensato di condividere come sto attualmente ricevendo l'indirizzo IP della richiesta nei miei script PHP, dato che questo post originariamente riguardava un migliore modo per ottenere una richiesta IP. Questo è un modo migliore, sebbene non sia una delle scelte fornite nel post originale.

Questo approccio utilizza una piccola libreria di funzioni per facilitare la portabilità.

<*>

Spero che questo possa aiutare qualcuno ora nel 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(); //

Spero che questo possa aiutare qualcuno ora nel 2018!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top