尽管时区有效,但设置默认时区不起作用
Posted
技术标签:
【中文标题】尽管时区有效,但设置默认时区不起作用【英文标题】: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 有什么影响。
【参考方案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
【讨论】:
以上是关于尽管时区有效,但设置默认时区不起作用的主要内容,如果未能解决你的问题,请参考以下文章