无法在 PHP 中设置默认时区

Posted

技术标签:

【中文标题】无法在 PHP 中设置默认时区【英文标题】:Can't set default timezone in PHP 【发布时间】:2011-09-03 15:37:36 【问题描述】:

我已经在我的 php.ini 文件中设置了这个,并重新启动了 php5-fpm 进程

date.timezone = "UTC"

但是 phpinfo() 脚本仍然显示:

date.timezone   America/New_York    America/New_York

phpinfo() 还表明正在使用正确的 ini 文件。

我已重新启动 - 但问题仍然存在。然后我做了:

sudo service nginx stop
sudo service apache2 start

当使用 mod-php (apache2) 而不是 nginx 中的 php fcgi 时,date.timezone 是正确的。

【问题讨论】:

确保您更新了正确的 php.ini... 通常服务器上不止一个。您可以使用 phpinfo() 找到正确的 嗯。是的。 - 在询问之前,我确实检查了是否使用了正确的文件。 - 实际上这是我的问题。 脚本本身是否可能覆盖时区的 php.ini 值? 我也在从 cli 进行测试。文件只包含这个: echo PHP_EOL 。 '时区: ' 。 date_default_timezone_get(); @Stann - 这个问题有点老了,你可能已经明白了。但如果没有,则需要重新启动 php-fpm 池。我必须运行/etc/init.d/php-fpm-5.5 restart 才能让它在 CentOS 系统上运行。单独重启 nginx 没有帮助。 【参考方案1】:

您可能编辑了错误的php.ini。请参阅 php_info()(或 php -i 用于 cli 解释器)使用哪一个。例如,在 ubuntu(可能还有其他 linux 发行版)上,它的 /etc/php5/cli/php.ini 用于 cli 解释器,/etc/php5/apache/php.ini/ 用于 Apaches 使用的 mod_php/etc/php5/cgi/php.ini 使用的 php5-cgi(由 nginx 使用) )。

【讨论】:

是的。我想到了那个。所以我实际上更改了所有 php.ini 配置文件中的 date.timezone:cli、apache2、cgi、fpm。它确实适用于 cli 和 apache2。它不在 fpm 中。【参考方案2】:

支持的时区值列表:http://php.net/timezones

【讨论】:

"UTC" 实际上在您提供的列表中。见here UTC - 在其他情况下,我在问这个问题之前已经检查过了。【参考方案3】:

问题似乎出在 php-fpm 进程上,它一直存在并引用旧的 php.ini 文件设置。 这对我有用:

获取 php-fpm 的进程 ID

root@thiru:/etc/php5/fpm/conf.d# ps aux | head -1 && ps aux | grep php-fpm | grep -v grep
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root     32650  0.0  0.5  86624 17032 ?        Ss   21:44   0:00    php-fpm: master process (/etc/php5/fpm/php-fpm.conf)                    
www-data 32652  0.0  0.1  86624  4700 ?        S    21:44   0:00 php-fpm: pool www                                                       
www-data 32653  0.0  0.1  86624  4704 ?        S    21:44   0:00 php-fpm: pool www   

杀死进程。从主人开始。

kill -9 32650
kill -9 32652
kill -9 32653

使用初始化脚本启动 php-fpm

service php5-fpm start or /etc/init.d/php5-fpm start

【讨论】:

那帮助 :) 但是“sudo service php5-fpm restart”对我来说已经足够了 :)【参考方案4】:

在我的默认安装中,我的配置非常奇怪。文件 /etc/php/7.3/fpm/pool.d/www.conf 在文件末尾有这样的设置

php_admin_value[date.timezone] = UTC

这会导致 php.ini 中的时区设置被忽略,默认系统时区被忽略。

【讨论】:

【参考方案5】:

检查您的 FPM 安装,如果您有一个带有活动 chroot 的池!

如果您有 chroot 环境,则需要将文件 /etc/localtime(符号链接到 /usr/share/zoneinfo/xyz)和目录 /usr/share/zoneinfo 复制到您的 chroot。

可能的错误消息:

Fatal error: phpinfo(): Timezone database is corrupt - this should *never* happen!  
Warning: phpinfo(): Invalid date.timezone value ‘UTC’, we selected the timezone ‘UTC’ for now.

见https://serverfault.com/questions/413293/php-fpm-chroot-jail-corrupts-timezone-db

【讨论】:

以上是关于无法在 PHP 中设置默认时区的主要内容,如果未能解决你的问题,请参考以下文章

如何在存储过程 MySql 中设置默认时区

即使在 php 中设置时区后,服务器中的时间戳也会给出错误的时间

无法在 apache2 [Debian 7.1] 中设置默认索引页

MySQL设置时区和默认编码

如何在流明 5.2 中设置时区?

在 PHP 和 MySQL 中设置时区