我已经在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
当使用modphp(apache2)而不是nginx中的php fcgi时,date.timezone是正确的。
您可能编辑了错误的php.ini
。请参阅php_info()
(或用于cli解释器的php -i
)使用哪一个。例如,在ubuntu(可能还有其他linux发行版)上,它的/etc/php5/cli/php.ini
用于cli解释器,/etc/php5/apache/php.ini/
用于Apache使用的mod_php
,/etc/php5/cgi/php.ini
用于php5-cgi
(nginx
使用)。
支持的时区值列表:http://php.net/timezones
问题似乎出在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
使用init脚本启动php-fpm
service php5-fpm start or /etc/init.d/php5-fpm start
在我的默认安装中,我有一个非常奇怪的配置。文件/etc/php/7.3/fpm/pool.d/www.conf在文件的末尾有这样的设置
php_admin_value[date.timezone] = UTC
这导致php.ini中的时区设置被忽略,默认系统时区被忽略。
如果您有一个带有活动chroot的池,请检查您的FPM安装!
如果您有chroot环境,则需要将文件/etc/localtime(指向/usr/share/zoneinfo/xyz的符号链接)和目录/usr/share/Zonainfo复制到您的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