Fordert einen Geo-IP-Server an, um zu prüfen, wo sich eine IP befindet (Host, Bundesland/Staat, Land, Stadt).
<?php
$ip='94.219.40.96';
print_r(geoCheckIP($ip));
//Array ( [domain] => dslb-094-219-040-096.pools.arcor-ip.net [country] => DE - Germany [state] => Hessen [town] => Erzhausen )
//Get an array with geoip-infodata
function geoCheckIP($ip)
{
//check, if the provided ip is valid
if(!filter_var($ip, FILTER_VALIDATE_IP))
{
throw new InvalidArgumentException("IP is not valid");
}
//contact ip-server
$response=@file_get_contents('http://www.netip.de/search?query='.$ip);
if (empty($response))
{
throw new InvalidArgumentException("Error contacting Geo-IP-Server");
}
//Array containing all regex-patterns necessary to extract ip-geoinfo from page
$patterns=array();
$patterns["domain"] = '#Domain: (.*?) #i';
$patterns["country"] = '#Country: (.*?) #i';
$patterns["state"] = '#State/Region: (.*?)<br#i';
$patterns["town"] = '#City: (.*?)<br#i';
//Array where results will be stored
$ipInfo=array();
//check response from ipserver for above patterns
foreach ($patterns as $key => $pattern)
{
//store the result in array
$ipInfo[$key] = preg_match($pattern,$response,$value) && !empty($value[1]) ? $value[1] : 'not found';
}
return $ipInfo;
}
?>
Sie sollten auch das Caching der Ergebnisse in Betracht ziehen, da dies die Geschwindigkeit erheblich erhöhen wird.
Für kleine Websites mit geringem Traffic wird es nicht allzu schlimm sein, aber wenn Sie mit Wachstum rechnen, ist dies etwas, das Sie sich jetzt ansehen müssen. Sie sollten auch bedenken, dass Sie sich darauf verlassen, dass die Website online ist und Daten auf eine bestimmte Weise zurückgibt, sodass die Regexes in Zukunft veraltet oder fehlerhaft sein könnten.
Nur ein paar Dinge, die man bedenken sollte.
Ich habe das wirklich gebraucht, danke!
Was wäre die beste Methode, um die IP-Adresse des Benutzers für die Verwendung hiermit zu erhalten?
$_SERVER[‘REMOTE_ADDR’]
Sie könnten die Funktion also wie folgt aufrufen
$ip=$_SERVER[‘REMOTE_ADDR’];
geoCheckIP($ip);
Ich wünschte, ich hätte das vor etwa 6 Monaten gesehen… es funktioniert brillant! Ich werde es jetzt auf vielen Websites einsetzen!
Ich habe damit herumgespielt und dachte, das könnte auch nützlich sein… es erlaubt Ihnen, je nach Standort des Benutzers, eine alberne Aussage umzuleiten oder auszugeben
$my_array=geoCheckIP($ip);foreach ($my_array as $key => $value){
if($key=='country'){
#Land umschalten
switch ($value) {
case 'GB - United Kingdom'
echo "Sie besuchen uns aus dem Vereinigten Königreich! Wir lieben die Briten!";
break;
case 'NZ - New Zealand'
echo "Sie besuchen uns aus Neuseeland. Wie ist das Wetter dort unten?";
break;
case 'US - United States'
echo "Sie besuchen uns aus den USA. Es muss schön sein, im Land der Tapferen zu sein. Ich würde gerne hingehen, bin aber zu feige!";
break;
case 'CA - Canada'
echo "Sie besuchen uns aus Kanada. Schneit es?";
break;
case 'AU - Australia'
echo "Sie besuchen uns aus Australien. Steigt Ihnen das Blut zu Kopf?";
break;
}
echo '
'.$key.': '.$value;
}
}
cool – ich brauche das, damit bestimmte Bundesstaaten außer Nebraska nur bestimmte Seiten sehen können.
wie würde das vollständige Skript in diesem Fall aussehen?
d. h.
wenn Sie in Nebraska sind – leitet es zu URL A um
wenn außerhalb von Nebraska – leitet es zu URL B um
danke – ryan
Hallo zusammen,
Dies ist der erste Teil einer Formel, um die Region automatisch per IP zu ermitteln.
In meinem Wufoo-Formular habe ich derzeit ein Regions-Dropdown, das erforderlich ist. Könnten wir eine Version davon verwenden, möglicherweise mit URL-Modifikationen, um die Regionsantwort in versteckte Wufoo-Felder zu schreiben?
Danke!!
Matalin
Danke, toller Share, ich brauchte das, es wird sehr hilfreich sein, die echte IP und den Standort meiner Benutzer zu erkennen, denn in den letzten Tagen wurde ich von einigen Spammern belästigt.
http://www.gysms.com
Warum stellen Sie deren Adressen auf dieser Website ein, wenn sie Spammer sind?
Wenn Sie ein Entwickler sind, sollten Sie wissen, dass Sie ihnen hier Backlinks verschaffen, was wirklich nicht clever ist...
ordentlich und funktional….weiß jemand, wie man das verwendet, um Beiträge basierend auf dem Benutzerstandort anzuzeigen? Beispiel: Eine Veranstaltungsliste, die Veranstaltungen am Standort des Benutzers anzeigt.
danke
Das ist ziemlich cool, aber ich glaube nicht, dass ich es jemals auf einem Produktionsserver verwenden werde, da es auf einem Drittanbieter basiert. Was passiert, wenn netip.de plötzlich abgeschaltet wird?
Hallo Typ, ich möchte meinen eigenen URL-Verkürzungsdienst erstellen. Wie mache ich das?
Hallo, das State-Muster wirft bei mir einen „nicht gefunden“-Fehler. Bitte helfen Sie…
Ich habe ebenfalls den Fehler „nicht gefunden“ erlebt, wenn ich Websites mit der WordPress-Plattform erstelle.
Array ( [domain] => localhost [country] => – [state] => not found [town] => not found )
irgendwelche Hilfe??
Hallo, verwenden Sie diesen Code nicht von localhost…
er schreibt $ip mit einer statischen Zahl, nicht $ip=$_SERVER[‘REMOTE_ADDR’];
weil es von dort nicht funktioniert
danke
Schön, wir haben auch etwas Ähnliches verwendet. Für all jene, die sich Sorgen machen, sich auf einen Drittanbieter-Webdienst zu verlassen: Denken Sie, das Wichtigste ist, es von jedem Dienst getrennt zu halten, damit Sie bei Bedarf leicht zu einem anderen wechseln können. Dieses Drupal-Modul leistet das zum Beispiel wirklich gut: https://drupal.org/project/smart_ip
Danke, toller Share, ich brauchte das, es wird sehr hilfreich sein, die echte IP und den Standort meiner Benutzer zu erkennen, denn in den letzten Tagen wurde ich von einigen Spammern belästigt.
http://ipinfo.io/ ist genauer. Und es ist sehr einfach mit PHP oder AJAX zu verwenden.
Schauen Sie sich die Entwicklerinformationen an: http://ipinfo.io/developers
function getRealIpAddr()
{
if (!empty($_SERVER[‘HTTP_CLIENT_IP’])) // IP von gemeinsam genutztem Internet prüfen
{
$ip=$_SERVER[‘HTTP_CLIENT_IP’];
}
elseif (!empty($_SERVER[‘HTTP_X_FORWARDED_FOR’])) // Prüfen, ob die IP über einen Proxy geleitet wurde
{
$ip=$_SERVER[‘HTTP_X_FORWARDED_FOR’];
}
else
{
$ip=$_SERVER[‘REMOTE_ADDR’];
}
return $ip;
}
function get_ip_address() {
// Prüfen auf gemeinsam genutztes Internet/ISP-IP
if (!empty($_SERVER[‘HTTP_CLIENT_IP’]) && validate_ip($_SERVER[‘HTTP_CLIENT_IP’])) {
return $_SERVER[‘HTTP_CLIENT_IP’];
}
}
function validate_ip($ip)
{
if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4 | FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE) === false) {
return false;
}
return true;
}
Seit dem 1. Juni 2020 funktioniert diese Methode nicht mehr.