Heim >Backend-Entwicklung >PHP-Tutorial >Wie erhalte ich die tatsächliche IP des Clients? HINWEIS: [8] Undefinierte Variable: IP Wie kann dieser Fehler behoben werden?
HTTP_CLIENT_IP
HTTP_X_FORWARD_IP
REMOTE_ADDR
Nacheinander erkennen? Oder gibt es eine andere Möglichkeit? Außer IP138?
Ist bei der folgenden Schreibmethode unter Verwendung der strengsten -Syntax etwas nicht in Ordnung? Wie kann ich sie ändern?
<code> function Getip() { if (!empty($_SERVER["HTTP_CLIENT_IP"])) { $ip = $_SERVER["HTTP_CLIENT_IP"]; } if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {//获取代理ip $ips = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']); } if ($ip) { $ips = array_unshift($ips, $ip); } $count = count($ips); for ($i = 0; $i < $count; $i++) { if (!preg_match("/^(10|172\.16|192\.168)\./i", $ips[$i])) {//排除局域网ip $ip = $ips[$i]; break; } } $tip = $ip ? $ip : $_SERVER['REMOTE_ADDR']; if ($tip == "127.0.0.1") {//获得本地真实IP return $this -> get_onlineip(); } else { return $tip; } }</code>
Oder die folgende Funktion nutzen?
<code>// 定义一个函数getIP() function getIP() { global $ip; if (getenv("HTTP_CLIENT_IP")) $ip = getenv("HTTP_CLIENT_IP"); else if(getenv("HTTP_X_FORWARDED_FOR")) $ip = getenv("HTTP_X_FORWARDED_FOR"); else if(getenv("REMOTE_ADDR")) $ip = getenv("REMOTE_ADDR"); else $ip = "Unknow"; return $ip; } </code>
HTTP_CLIENT_IP
HTTP_X_FORWARD_IP
REMOTE_ADDR
Nacheinander erkennen? Oder gibt es eine andere Möglichkeit? Außer IP138?
Ist bei der folgenden Schreibmethode unter Verwendung der strengsten -Syntax etwas nicht in Ordnung? Wie kann ich sie ändern?
<code> function Getip() { if (!empty($_SERVER["HTTP_CLIENT_IP"])) { $ip = $_SERVER["HTTP_CLIENT_IP"]; } if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {//获取代理ip $ips = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']); } if ($ip) { $ips = array_unshift($ips, $ip); } $count = count($ips); for ($i = 0; $i < $count; $i++) { if (!preg_match("/^(10|172\.16|192\.168)\./i", $ips[$i])) {//排除局域网ip $ip = $ips[$i]; break; } } $tip = $ip ? $ip : $_SERVER['REMOTE_ADDR']; if ($tip == "127.0.0.1") {//获得本地真实IP return $this -> get_onlineip(); } else { return $tip; } }</code>
Oder die folgende Funktion nutzen?
<code>// 定义一个函数getIP() function getIP() { global $ip; if (getenv("HTTP_CLIENT_IP")) $ip = getenv("HTTP_CLIENT_IP"); else if(getenv("HTTP_X_FORWARDED_FOR")) $ip = getenv("HTTP_X_FORWARDED_FOR"); else if(getenv("REMOTE_ADDR")) $ip = getenv("REMOTE_ADDR"); else $ip = "Unknow"; return $ip; } </code>
Diese Methode ist derzeit die sicherste.
ip138 kann nur die IP des Besuchers abrufen. Wenn es sich um einen Serverzugriff handelt, ist es die IP des Servers
Derzeit gibt es nicht viel Forschung zu dieser Anforderung. Bei der normalen Arbeit wird sie durch sequentielle Erkennung ermittelt.
Tatsächlich werden normale Benutzer ihre IP nicht absichtlich verbergen und auch nicht über mehrere Proxy-Ebenen auf Ihre Dienste zugreifen. Für normale Benutzer reicht es aus, die Authentizität der IP zu beurteilen erhalten ist, ist auch ziemlich hoch.
Das ist eine gute Frage. Das lässt sich wirklich nicht einfach lösen. Einige Client-IPs haben Probleme mit Täuschung und Proxying, daher ist es nicht zu 100 % möglich, sie zu erhalten. Wie andere Internetnutzer jedoch sagten, gibt es immer noch sehr wenige normale Benutzer, die Proxys verwenden. Ich glaube, Sie können Ihre eigene Methode verwenden oder auf andere Bibliotheken von Drittanbietern verweisen, um IP zu erhalten