默认欧洲时区以 php.ini 为单位设置,但 date_default_timezone_get() 返回“UTC”


Default Europe timezone set in php.ini, but date_default_timezone_get() returns 'UTC'

我在php.ini文件中设置了默认时区:

date.timezone = Europe/Rome

编辑后我也重新启动了httpd服务(服务 httpd 重新启动),但是当我调用 date_default_timezone_get() 时,它返回"UTC"值。

为什么会这样?

同时调用php_info()会显示在 php.ini 中设置的时区

对不起我的英语。

如果你的代码(包括任何框架)真的没有改变时区,并且你在从5.1.x到5.3.x的PHP版本下运行,那么TZ环境变量可能是在系统中的某个地方设置的。然后,您的date.timezone设置将被忽略

请参阅date.timezone的PHP手册页(强调我的):

所有日期/时间函数使用的默认时区。在 PHP 5.4.0 之前,这仅在未设置 TZ 环境变量时才有效。[...]

要检查系统中是否设置了TZ环境变量,您可以使用

if (isset($_ENV['TZ'])) {
    echo 'TZ=' . $_ENV['TZ'];
}
else {
    echo 'TZ not set';
}

或放置

phpinfo();

在代码中的某个地方,并检查其输出最底部的"PHP 变量"部分。

我刚刚遇到了同样的问题。

在我的php.ini时区是消息灵通的:
date.timezone = Europe/Paris

我用 php 命令检查了--ri date
php.ini时区得到了很好的处理,所以错误不是来自 ini 文件。

错误来自httpd.conf apache的文件,其中声明为变量PHPIniDir

我把PHPIniDir "C:'PHP'"

您必须删除最后一个反斜杠,该反斜杠提供:
PHPIniDir "C:'PHP"

我希望这些反馈会有所帮助。

(只是一个精度,我的环境是:Windows 7,php 5.4.32和apache 2.2.25)