无法在 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 中设置默认时区的主要内容,如果未能解决你的问题,请参考以下文章
即使在 php 中设置时区后,服务器中的时间戳也会给出错误的时间