PHP IP adresi aracılığıyla zaman dilimini almak istiyorum. Aslında ben istemci makine çalışacak bir uygulama var. Ben istemci makine IP adresi var. Ama her istemci makine için zaman dilimini almak mümkün değil.
trucks bisiklet filosu almak ve herkesin kablosuz router ip adresi ve güncel GPS koordine günlüğü dünyada sürücü.
İşte Google ne yaptığını. Şaka yapmıyorum.
Bunu göze alamaz, IP adresine göre size zaman dilimini anlatan, MaxMind GeoLite2 kullanın. Bu bir yerel PHP API ("veritabanı okuyucu") vardır.
IP adresi bir ülke bile eşlemek dayanıyordu olamaz; Ayrıca dilimini almak istiyorsanız eğer ince buz basıyorsun. Sen bir başlık belki müşteri send Eğer zaman dilimi, olması daha iyi.
Tor: anonymity online onlar için tasarlanmış değildi şeyler için IP adreslerini kullanarak durdurmak için başka bir neden için bkz.
If you're running it on the local machine, you can check the configured timezone.
http://www.php.net/manual/en/function.date-default-timezone-get.php
Orada çok daha iyi ve daha güvenilir yöntemleri sonra GeolP kullanarak dilimini tahmin etmeye çalışıyorum. Eğer şanslı hissediyor iseniz, deneyin: http://www.php.net/manual/en/book.geoip.php
$region = geoip_region_by_name('www.example.com');
$tz = geoip_time_zone_by_country_and_region($region['country_code'],
$region['region']);
It's not straight forward but I get the time including daylight saving offset from 2 api calls using jquery and php. All of it could be done in PHP quite easily with a bit of adaptation. I'm sure this could be laid out differently too but I just grabbed it from existing code which suited my needs at the time.
JQuery / php:
function get_user_time(){
var server_time = <? echo time(); ?>; //accuracy is not important it's just to let google know the time of year for daylight savings time
$.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"){
//handle error
}else{
user_time.rawOffset /= 3600;
user_time.dstOffset /= 3600;
user_real_offset = user_time.rawOffset+user_time.dstOffset+user_time.utc;
//do something with 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"}';
}
Burada ücretsiz anahtarını kaydettirmek: http://ipinfodb.com/register.php (hiçbir sınırlama ancak kuyruğa eğer fazla 1 saniyede istek)
Ne bilmeniz gereken web sayfanızı gezen kullanıcılar zaman dilimi ise, o zaman IP2LOCATION dilimini tahmin etmek gibi bazı hizmetini kullanabilirsiniz. AltCognito dediği gibi, bu müşterinin zaman dilimini anlatan bir% 100 doğru bir yol değildir, olsa tutun. Bu yaklaşımla bazı doğruluk sorunlar vardır.