我想将时区设置为访问者的时区。
我这样做是这样的:
$ip = $_REQUEST['REMOTE_ADDR']; // the IP address to query
$query = @unserialize(file_get_contents('http://ip-api.com/php/'.$ip));
if($query && $query['status'] == 'success') {
date_default_timezone_set($query['timezone']);
} else {
echo 'Unable to get location';
}
但是,当另一个访问者访问该网站时,他将获得前一个访问者的时区......
为什么 date_default_timezone
没有清除?有什么办法解决吗?
如有任何帮助,我们将不胜感激。
谢谢!
最佳答案
$_REQUEST
用于从 GET/POST 请求获取数据。它应该是 $_SERVER['REMOTE_ADDR']
代码
$ip = $_SERVER['REMOTE_ADDR']; // the IP address to query
$query = @unserialize(file_get_contents('http://ip-api.com/php/'.$ip));
if($query && $query['status'] == 'success') {
date_default_timezone_set($query['timezone']);
echo 'timezone set to '.$query['timezone'];
} else {
echo 'Unable to get location';
}
输出
timezone set to Asia/Kolkata
说明:
$_REQUEST['REMOTE_ADDR']
没有值,意味着$ip
为空。如果你查询http://ip-api.com/php/
没有ip,它会默认获取请求ip并显示请求数据而不是ip数据。这就是为什么您为每个访问者获得相同的时区。
奖金
您无需使用任何 API 即可获取访问者时区。 $_SERVER['COOKIE']
具有访问者的时区
。
片段
parse_str($_SERVER['HTTP_COOKIE'], $cookie);
if(isset($cookie['timezone'])){
date_default_timezone_set($cookie['timezone']);
}
else{
echo 'Unable to get location'; //or do something!
}
关于php - date_default_timezone_set() 对每个人应用相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51804918/