Wie kann ich die IP-Adresse des Clients mit PHP ermitteln?
Ich möchte den Benutzer, der sich auf meiner Website angemeldet hat, über seine IP-Adresse aufzeichnen.
Wie kann ich die IP-Adresse des Clients mit PHP ermitteln?
Ich möchte den Benutzer, der sich auf meiner Website angemeldet hat, über seine IP-Adresse aufzeichnen.
Diese Funktion sollte wie erwartet funktionieren
function Get_User_Ip()
{
$IP = false;
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('HTTP_X_FORWARDED'))
{
$IP = getenv('HTTP_X_FORWARDED');
}
else if(getenv('HTTP_FORWARDED_FOR'))
{
$IP = getenv('HTTP_FORWARDED_FOR');
}
else if(getenv('HTTP_FORWARDED'))
{
$IP = getenv('HTTP_FORWARDED');
}
else if(getenv('REMOTE_ADDR'))
{
$IP = getenv('REMOTE_ADDR');
}
//If HTTP_X_FORWARDED_FOR == server ip
if((($IP) && ($IP == getenv('SERVER_ADDR')) && (getenv('REMOTE_ADDR')) || (!filter_var($IP, FILTER_VALIDATE_IP))))
{
$IP = getenv('REMOTE_ADDR');
}
if($IP)
{
if(!filter_var($IP, FILTER_VALIDATE_IP))
{
$IP = false;
}
}
else
{
$IP = false;
}
return $IP;
}
Hier ist ein einfacher Einzeiler
$ip = $_SERVER['HTTP_X_FORWARDED_FOR']?: $_SERVER['HTTP_CLIENT_IP']?: $_SERVER['REMOTE_ADDR'];
EDIT :
Der obige Code liefert möglicherweise reservierte Adressen (wie 10.0.0.1), eine Adressenliste aller unterwegs befindlichen Proxyserver, usw. Um diese Fälle zu behandeln, verwenden Sie den folgenden Code:
function valid_ip($ip) {
// for list of reserved IP addresses, see https://en.wikipedia.org/wiki/Reserved_IP_addresses
return $ip && substr($ip, 0, 4) != '127.' && substr($ip, 0, 4) != '127.' && substr($ip, 0, 3) != '10.' && substr($ip, 0, 2) != '0.' ? $ip : false;
}
function get_client_ip() {
// using explode to get only client ip from list of forwarders. see https://en.wikipedia.org/wiki/X-Forwarded-For
return
@$_SERVER['HTTP_X_FORWARDED_FOR'] ? explode(',', $_SERVER['HTTP_X_FORWARDED_FOR'], 2)[0] :
@$_SERVER['HTTP_CLIENT_IP'] ? explode(',', $_SERVER['HTTP_CLIENT_IP'], 2)[0] :
valid_ip(@$_SERVER['REMOTE_ADDR']) ?:
'UNKNOWN';
}
echo get_client_ip();
Wie das Folgende?
if (($ip=filter_input(INPUT_SERVER, 'REMOTE_ADDR', validate_ip)) === false or empty($ip)) {
exit;
}
echo $ip;
PS
if (($ip=filter_input(INPUT_SERVER, 'REMOTE_ADDR', FILTER_VALIDATE_IP|FILTER_FLAG_NO_PRIV_RANGE|FILTER_FLAG_NO_RES_RANGE)) === false) {
header('HTTP/1.0 400 Bad Request');
exit;
}
Alle Header, die mit 'HTTP_' oder 'X-' beginnen, können gefälscht werden, bzw. sind benutzerdefiniert. Wenn Sie den Überblick behalten wollen, Cookies verwenden, etc.
Um die IP-Adresse des Clients zu erhalten, verwenden Sie bitte getenv("REMOTE_ADDR")
.
Zum Beispiel,
$ip_address = getenv("REMOTE_ADDR");
echo $ip_address;
Wenn Sie Ihren Server über localhost aufrufen, wird er Folgendes ausgeben ::1
. Rufen Sie also bitte Ihren Server mit der direkten Server-IP-Adresse oder Domäne auf.
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.