【问题标题】:"It is not safe to rely on the system's timezone settings" after setting it设置后“依赖系统的时区设置是不安全的”
【发布时间】:2015-07-13 07:57:16
【问题描述】:

在我的配置文件的开头我有:

    date_default_timezone_set('America/Los_Angeles');
    echo "Set default timezone: " . date_default_timezone_get() . "\n";
   ...

我通过 CLI 执行 PHP 脚本,输出如下所示:

设置默认时区:America/Los_Angeles

PHP 警告:date():依赖系统的时区是不安全的 设置。您必须使用 date.timezone 设置或 date_default_timezone_set() 函数。如果您使用了其中任何一个 方法并且您仍然收到此警告,您很可能 时区标识符拼写错误。我们选择了时区“UTC” 现在,但请设置 date.timezone 以选择您的时区。在

为什么我在设置时区后仍收到“依赖系统的时区设置不安全”的消息?

-------- 更新 ---------

原来这是线程问题,所以需要设置为php.ini来解决。

<?php

require __DIR__ . '/config.php';

date_default_timezone_set('America/Los_Angeles');

echo "Timezone: " . date_default_timezone_get() . "\n";

function threadTest() {
    echo "Thread Timezone: " . date_default_timezone_get() . "\n";
}

$thread = new Thread_Async();
$thread->call('threadTest');

结果:

时区:美国/洛杉矶

PHP 警告:date_default_timezone_get():依赖它是不安全的 系统的时区设置。您必须使用 date.timezone 设置或 date_default_timezone_set() 函数。在 如果你使用了这些方法中的任何一种,你仍然得到这个 警告,您很可能拼错了时区标识符。我们 暂时选择时区“UTC”,但请将 date.timezone 设置为 选择您的时区。在 /pvolf/wwwdev/app/test.php 第 10 行

线程时区:UTC

【问题讨论】:

  • 我在 CLI 和浏览器上测试了您的代码,但无法重现该错误。你确定你已经保存了文件吗?
  • 我认为这是在 Thread_Async 对象内部发生的,这可能是原因吗?也许当你创建一个新线程时时区设置不会被复制?
  • 在我可以访问的 3 台服务器上 100% 工作
  • 我意识到这是线程问题,不过感谢您的输入

标签: php timezone


【解决方案1】:

检查用于命令行的 ini。我敢打赌它没有设置时区。尝试使用-d date.timezone=UTC 运行命令行,例如:

php -d date.timezone=UTC foo.php

【讨论】:

  • 应该没关系,date_default_timezone_set 会覆盖 ini 设置
  • 我发现了问题,时区设置没有传递给 Thread_Async
猜你喜欢
  • 2011-08-07
  • 2012-09-14
  • 2011-08-27
  • 2014-07-18
  • 2014-01-11
  • 2011-01-13
  • 2017-11-20
  • 2016-07-22
相关资源
最近更新 更多