PHP 错误 500:时区数据库已损坏 - 这绝不应该发生

PHP 错误 500:时区数据库已损坏 - 这绝不应该发生

我全新安装了 Ubuntu Server 16.04 amd64,其中装有 apache 2.4.18 和 php 7.0。

我已经使用 chroot 了 Apachemod_envChrootDir /var/www/etc/apache2/apache2.conf据我所知,问题就在这里。我想安装 NexctCloud 11,但第一次运行时出现 500 错误。

Apache 错误日志:

[Fri Mar 17 08:21:22.262901 2017] [:error] [pid 31480] [client 193.175.51.226:55749] PHP Notice:  date_default_timezone_set(): Timezone ID 'UTC' is invalid in /html/sub.example.com/public_html/lib/base.php on line 637, referer: https://sub.example.com/
[Fri Mar 17 08:21:22.266581 2017] [:error] [pid 31480] [client 193.175.51.226:55749] PHP Warning:  DateTime::createFromFormat(): Invalid date.timezone value 'Europe/Berlin', we selected the timezone 'UTC' for now. in /html/sub.example.com/public_html/lib/private/Log/File.php on line 85, referer: https://sub.example.com/
[Fri Mar 17 08:21:22.266610 2017] [:error] [pid 31480] [client 193.175.51.226:55749] PHP Fatal error:  DateTime::createFromFormat(): Timezone database is corrupt - this should *never* happen! in /html/sub.example.com/public_html/lib/private/Log/File.php on line 85, referer: https://sub.example.com/

如果我停用 Chroot,一切都会好起来,但我更喜欢其他不必停用 chroot 的解决方案。

我在网上找到了一个建议:http://ivanbayan.com/index.php/2013/06/26/how-to-fix-timezone-database-is-corrupt-this-should-never-happen/我已经尝试过(针对我的 php7 进行了定制),但它没有解决问题。我还尝试了这里的一些建议,但没有解决我的问题:PHP 启动:时区数据库已损坏

//编辑:看来这不仅是 NextCloud 的问题。这是在 PHP 中使用 date() 函数的问题。以下脚本会导致相同的错误:

<?php
date_default_timezone_set('Europe/Berlin');

echo date("l");
?>

答案1

解决方案:

mkdir -p /var/www/usr/lib/locale
mkdir -p /var/www/usr/share/zoneinfo

cd /var/www
cp /etc/localtime etc/localtime
cp /usr/share/zoneinfo/ usr/share/zoneinfo/

这解决了问题(NectCloud 和 Chroot 存在更多错误,例如语言环境,我已经使用相同的程序修复了这些错误)。

相关内容