Ich möchte die Zeitzone über eine IP-Adresse in PHP erhalten. Tatsächlich habe ich eine Anwendung, die auf der Client-Maschine ausgeführt wird. Ich habe die IP-Adresse der Client-Maschine. Aber es gelingt mir nicht, die Zeitzone für jede Client-Maschine zu bekommen.
Antworten
Zu viele Anzeigen?Es ist nicht einfach, aber ich hole mir die Zeit einschließlich der Sommerzeitverschiebung aus 2 API-Aufrufen mit Hilfe von jQuery und PHP. All dies könnte recht einfach in PHP erledigt werden, mit ein wenig Anpassung. Ich bin sicher, dass dies auch anders angelegt werden könnte, aber ich habe es einfach aus vorhandenem Code genommen, der zu der Zeit meinen Bedürfnissen entsprach.
Jquery/php:
function get_user_time(){
var server_time = ; //Die Genauigkeit ist nicht wichtig, es geht einfach darum, Google die Jahreszeit für die Sommerzeit zu übermitteln
$.ajax({
url: "locate.php",
dataType: "json",
success: function(user_location) {
if(user_location.statusCode=="OK"){
$.ajax({
url: "https://maps.googleapis.com/maps/api/timezone/json?location="+user_location.latitude+","+user_location.longitude+"×tamp="+server_time+"&sensor=false",
dataType: "json",
success: function(user_time) {
if(user_time.statusCode=="error"){
//Fehler behandeln
}else{
user_time.rawOffset /= 3600;
user_time.dstOffset /= 3600;
user_real_offset = user_time.rawOffset+user_time.dstOffset+user_time.utc;
//Tu etwas mit user_real_offset
}
}
});
}
}
});
}
locate.php
function get_client_ip() {
$ipaddress = '';
if ($_SERVER['HTTP_CLIENT_IP'])
$ipaddress = $_SERVER['HTTP_CLIENT_IP'];
else if($_SERVER['HTTP_X_FORWARDED_FOR'])
$ipaddress = $_SERVER['HTTP_X_FORWARDED_FOR'];
else if($_SERVER['HTTP_X_FORWARDED'])
$ipaddress = $_SERVER['HTTP_X_FORWARDED'];
else if($_SERVER['HTTP_FORWARDED_FOR'])
$ipaddress = $_SERVER['HTTP_FORWARDED_FOR'];
else if($_SERVER['HTTP_FORWARDED'])
$ipaddress = $_SERVER['HTTP_FORWARDED'];
else if($_SERVER['REMOTE_ADDR'])
$ipaddress = $_SERVER['REMOTE_ADDR'];
else
$ipaddress = 'UNKNOWN';
return $ipaddress;
}
$location = file_get_contents('http://api.ipinfodb.com/v3/ip-city/?key=xxxxxxxxx&ip='.get_client_ip().'&format=json');
$location = json_decode($location,true);
if(is_array($location)){
date_default_timezone_set('UTC');
$location['utc'] = time();
echo json_encode($location);
}else{
echo '{"statusCode":"error"}';
}
Registrieren Sie sich hier für einen kostenlosen Schlüssel: http://ipinfodb.com/register.php (keine Begrenzung, aber Warteschlange bei mehr als 1 Anfrage pro Sekunde)
Wenn Sie die Zeitzone der Benutzer, die Ihre Webseite durchsuchen, herausfinden möchten, können Sie einen Dienst wie IP2LOCATION verwenden, um die Zeitzone zu erraten. Beachten Sie jedoch, wie altCognito gesagt hat, dass dies nicht der genaueste Weg ist, um die Zeitzone des Clients zu bestimmen. Es gibt einige Genauigkeitsprobleme bei diesem Ansatz.
Überprüfen Sie die Maxmind GeoLite2-Datenbank. Sie enthält Details über den Kontinent/das Land/die Stadt und die Breiten-/Längengrade für die meisten IP-Adressen, einschließlich der Zeitzone, wie Sie unten sehen können.
Ich erkläre hier, wie man die PHP-Erweiterung kompiliert und wie man die mmdb-Datenbanken in PHP verwendet:
Hier ist ein Beispiel für die Verwendung einer Standort-API, die IP-Adressen mit Zeitzonen verknüpft, z. B. eine Anfrage an https://ipapi.co//timezone/
sendet und die Zeitzonen für diese IP-Adresse zurückgibt.
PHP-Code
file_get_contents('https://ipapi.co/1.2.3.4/timezone/');
Die Genauigkeit ist nicht zu 100 %, wie bereits von anderen gesagt wurde.
- See previous answers
- Weitere Antworten anzeigen
0 Stimmen
Versuchen Sie dies: sanjaykumarns.blogspot.com/p/…