按照最佳做法不直接修改php.ini
但有单独的文件,我有以下文件:
$ cat /etc/php/7.0/apache2/conf.d/99-timezone.ini
[Date]
date.timezone="America/Los_Angeles"
我可以看到正在加载ini文件,如phpinfo screenshot所示。但是,在date section中,只有两个指令中的一个更新为显示America/Los_Angeles
,其中一个是UTC
。我甚至不知道UTC的来源,因为系统的时间不是UTC:
$ timedatectl
Local time: Tue 2017-11-07 18:36:56 PST
Universal time: Wed 2017-11-08 02:36:56 UTC
Timezone: America/Los_Angeles (PST, -0800)
(snip)
当我运行以下各项时,我看到以下输出:
var_dump(ini_get('date.timezone')); //string(19) "America/Los_Angeles"
var_dump(date_default_timezone_get()); //string(3) "UTC"
var_dump(date('e')); //string(3) "UTC"
如何将前两个到当地时间?
答案 0 :(得分:1)
查看你的second screenshot,发生这种情况的唯一方法(我知道)是在运行时调用了date_default_timezone_set('UTC');
。它会改变“默认时区”,使其与.ini文件中的date.timezone
值不同。
所以寻找类似的东西:
auto_prepend_file=
。该指令使脚本在处理的每个PHP文件之前自动添加前缀。如果它正在使用并且它加载的PHP文件设置了时区,则可能导致这种情况。
您使用的是PHP框架吗?如果是这样,请在框架的PHP文件中搜索date_default_timezone_set
。例如,WordPress将时区强制为UTC。
如果不使用框架,您使用的是任何可能包含date_default_timezone_set
的PHP库吗?如果是这样,那可能是麻烦。
在phpinfo()
输出中显示这样的事实表明它是auto_prepend_file
这样做,因为我假设您正在检查phpinfo只有一个文件包含<?php phpinfo();
- 没有框架或库。