Frage

Was ist der bessere Weg, um die IP-Adresse in PHP zu bekommen:

getenv('REMOTE_ADDR'); 

oder

$_SERVER['REMOTE_ADDR'];

Bitte sagen Sie mir den Unterschied, wenn überhaupt, zwischen den beiden.

War es hilfreich?

Lösung

getenv () verwendet werden kann, alle Umgebungsvariablen für den Zugriff auf (PHP-Register einfach REMOTE_ADDR als Umgebungsvariable für das Skript), während mit $ _SERVER nur Sie offensichtlich den Inhalt des $ _SERVER Superglobal zugreifen.

Der gemeinsame Ansatz ist dies $ _SERVER für zu verwenden, obwohl es nicht wirklich einen Unterschied Funktionalität weise macht.

Andere Tipps

$ _ SERVER ein in PHP-Variablen erstellt wird, während getenv () fragt die Umwelt (wahrscheinlich Apache / IIS) für Werte.

Der beste Weg, die IP zu erhalten ist;

$ip = (!empty($_SERVER['REMOTE_ADDR'])) ? $_SERVER['REMOTE_ADDR'] : getenv('REMOTE_ADDR');

Aber ich bezweifle, gibt es einen Unterschied zwischen diesen beiden Variablen ... Hm.

Es wäre wahrscheinlich besser zu nutzen   $ _SERVER [ 'REMOTE_ADDR']; zu verhindern Inkompatibilitäten zwischen Servern.

Es gibt keine Unterschiede zwischen den tho Anrufe. Wie Sie PHP-Handbuch sehen beiden Verfahren in dem gleichen Beispiel. Es gibt einige Fälle, in denen Sie globale Variablen wie $ _SERVER haben nicht aktiviert ist und Sie sind gezwungen, getenv () zu verwenden. Nach meiner Erfahrung habe ich noch nie einen Server mit globalen Variablen deaktiviert gesehen.

Mit $_SERVER['REMOTE_ADDR'] lesen Sie direkt auf die globale Variable durch den $ _SERVER [Zugriff] Array, das eingerichtet ist, wenn eine Remote-Anfrage auftritt:

$ _SERVER ist ein Array mit Informationen wie beispiels wie Header, Pfade und Skript Standorten. Die Einträge in diesem Array werden von dem Web-Server erstellt. Es gibt keine Garantie, dass jeder Web-Server eine dieser bieten wird; Server können einige oder andere Firmen bieten hier nicht aufgeführt weglassen. Das heißt, eine große Anzahl dieser Variablen werden in der »CGI-1.1-Spezifikation berücksichtigt, so sollten Sie in der Lage sein, diejenigen zu erwarten.

Die Funktion getenv () Zugriff auf jede Umgebungsvariable den zugehörigen Wert zu erhalten!

In beiden Fällen können Sie den gleichen Wert zugreifen und die gleiche Variable ... aber $ _SERVER ist ein Build in PHP superglobalen Variable statt getenv () den Wert einer Variable in der Definition in der aktuellen Umgebung!

Ich denke, dass die Verwendung der superglobalen Variable in diesem Fall ist der beste Weg, um die IP-Adresse zu erhalten!

Dieser Beitrag ist ein bisschen veraltet, so dachte ich, ich würde teilen, wie ich zur Zeit die Anfrage IP-Adresse in meinem PHP-Skripte immer bin, wie dieser Beitrag ursprünglich über eine war besser Art und Weise eine Anfrage IP zu erhalten. Dies ist eine bessere Art und Weise, wenn auch nicht eine der in der ursprünglichen Post gegebenen Möglichkeiten.

Dieser Ansatz verwendet eine kleine Funktionsbibliothek für einfache Portabilität.

// 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, $_SERVER) === true){
      foreach (explode(',', $_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();

//

Hope dies jetzt jemanden im Jahr 2018 helfen wird!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top