【问题标题】:Setting default timezone does not work despite timezone being valid尽管时区有效,但设置默认时区不起作用
【发布时间】:2012-02-04 11:08:29
【问题描述】:

我只是在做 phpinfo() 时得到的

警告:phpinfo():依赖系统的时区设置是不安全的。您需要使用 date.timezone 设置或 date_default_timezone_set() 函数。如果您使用了这些方法中的任何一种,但仍然收到此警告,您很可能拼错了时区标识符。我们在第 8 行的 /myadmin/i.php 中为“EET/2.0/no DST”选择了“Europe/Helsinki”

这里是 i.php:

<?php
//echo date_default_timezone_get();

date_default_timezone_set("Europe/Kiev");

//echo date("l");

phpinfo();
?>

如您所见,当我执行 date_default_timezone_set("Europe/Kiev") 时,我得到:

注意:date_default_timezone_set():时区 ID 'Europe/Kiev' 在 /myadmin/i.php 第 4 行无效

我确定我使用的是来自here 的有效时区字符串,并且我确实设置了:

date.timezone = 欧洲/基辅

在 php.ini 文件中。

环境:CentOS 6,nginx/1.1.11,PHP 5.3.8 (fpm-fcgi)

我真的不明白这是怎么回事。 谢谢。

【问题讨论】:

  • date_default_timezone_set('Europe/Kiev'); 返回什么? should 成功返回true,失败返回false
  • 其他时区有效吗?你可以试试php.net/manual/en/datetimezone.listidentifiers.php 给出的例子来打印所有支持的时区吗?
  • 不知何故 DateTimeZone::listIdentifiers() 返回 array(0) { } HOW ?
  • "可以通过 PECL 的 » timezonedb 安装最新版本的时区数据库。"
  • php 使用的时区数据库 (Olson DB) 存在一些法律问题。但是我不知道这对 PHP 有什么影响。

标签: php timezone centos centos6


【解决方案1】:

感谢 cmets,我能够解决我的问题。我在控制台中做了什么:

#yum install php-pear

#pecl install timezonedb

需要c编译器:

configure: error: no acceptable C compiler found in $PATH

...所以我做了:

#yum install gcc

另外, 如果您收到有关 make 命令的错误,只需运行

#yum install make

最后,再试一次:

#pecl install timezonedb

...它显示在末尾:

You should add "extension=timezonedb.so" to php.ini

我在/etc/php.ini中添加了“extension=timezonedb.so”,并重启了php-fpm:

#/etc/init.d/php-fpm restart

【讨论】:

  • 在运行pecl之前,你需要phpize,它要安装php-devel #yum install php-devel
【解决方案2】:

为了扩展 futureboxlab 的解决方案,如果您没有安装 make,您可能会遇到另一个关于“make”命令的错误。 在这种情况下,您只需要运行

#yum install make

然后,再一次(第三次的魅力)

#pecl install timezonedb

【讨论】:

    猜你喜欢
    • 2015-07-01
    • 1970-01-01
    • 2012-12-21
    • 1970-01-01
    • 1970-01-01
    • 2011-11-21
    • 2012-03-29
    • 2011-07-01
    相关资源
    最近更新 更多