php - date_default_timezone_set() 对每个人应用相同

标签 php

我想将时区设置为访问者的时区。

我这样做是这样的:

$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/

相关文章:

PHP/MySql 连接开销

php - 如何使用 PDO 动态构建查询

php - PHP 中的 MD5 实现 - 我哪里出错了?

javascript - file_put_content 数组结构不起作用

php - 是否可以在 Laravel 中使用 mysqli 作为数据库驱动程序?

php - 如何在 CodeIgniter 的 Controller 内覆盖配置数组?

php - 无法使用 apache 2.2.15 访问 CentOS 6 上的虚拟主机

php - 无效的链接: Cannot load presenter 'Post' , class 'App\Presenters\PostPresenter' was not found

php - 选择多个表mysql

Javascript 代码无法在 Laravel 头文件上运行