Heim > Artikel > Backend-Entwicklung > PHP kann keine echte IP erhalten
1. Ermitteln Sie die tatsächliche IP-Adresse des Benutzers
public static function getClientIp() { if (getenv('HTTP_CLIENT_IP')) { $ip = getenv('HTTP_CLIENT_IP'); } if (getenv('HTTP_X_REAL_IP')) { $ip = getenv('HTTP_X_REAL_IP'); } elseif (getenv('HTTP_X_FORWARDED_FOR')) { $ip = getenv('HTTP_X_FORWARDED_FOR'); $ips = explode(',', $ip); $ip = $ips[0]; } elseif (getenv('REMOTE_ADDR')) { $ip = getenv('REMOTE_ADDR'); } else { $ip = '0.0.0.0'; } return $ip; }
Hinweis:
$ Der Unterschied zwischen _SERVER und getenv besteht darin, dass getenv PHP nicht unterstützt, das im IIS-Isapi-Modus ausgeführt wird. Die Funktion getenv("REMOTE_ADDR") kann die IP-Adresse normalerweise unter Apache abrufen, hat jedoch keine Wirkung in iis. Die Funktion $_SERVER['REMOTE_ADDR'] kann die IP-Adresse des Besuchers in Apache erfolgreich abrufen, aber auch unter iis.
2. Über REMOTE_ADDR
Diese Variable bezieht sich auf die IP-Adresse der „direkten Quelle“. die Adresse und IP. Bei einem einzelnen Server ist diese IP sehr genau und kann nicht gefälscht werden. Natürlich müssen nicht alle Programme einzelne Server sein. Wenn beispielsweise ein Lastausgleich verwendet wird (z. B. die Verwendung von Haproxy oder Nginx für den Lastausgleich), ist diese IP die IP des Weiterleitungscomputers, da der Prozess vom Client geladen wird Balancing-> ;Serverseitig. Es ist der Server, auf den der Load Balancer direkt zugreift, und nicht der Client.
3. In Bezug auf HTTP_X_FORWARDED_FOR und HTTP_CLIENT_IP
Es ist unmöglich, die Client-IP durch direkte Verwendung von REMOTE_ADDR unter Lastausgleich zu erhalten. Daher wurde die Lastausgleichsseite abgeleitet, um die Client-IP zu HEAD hinzuzufügen und an den Server zu senden, damit der Server die tatsächliche IP des Clients erhalten kann. Natürlich entsteht das, was Sie als Fälschung bezeichnen, schließlich sind außer den festen Daten im HEAD-Protokoll auch andere Daten anpassbar.
Empfohlenes Tutorial: PHP-Video-Tutorial
Das obige ist der detaillierte Inhalt vonPHP kann keine echte IP erhalten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!