【问题标题】:PHP timezone error while using errors logger使用错误记录器时出现 PHP 时区错误
【发布时间】:2011-12-11 20:00:21
【问题描述】:

要重现的代码:

error_reporting(-1);

ini_set('display_errors', 1);
ini_set('error_log', 'log/log');        
ini_set('html_errors', 0);

// trigger an error
echo $test;

如果log/log 是可写的并且你没有在php.ini 中设置date.timezone 或使用date_default_timezone_set,你会看到这个错误:

警告:main():依赖系统的时区是不安全的 设置。您必须使用 date.timezone 设置或 date_default_timezone_set() 函数。如果您使用了其中任何一个 方法并且您仍然收到此警告,您很可能 时区标识符拼写错误。我们选择了“欧洲/巴黎” '1.0/no DST' 代替 C:\srv\www\test.php 第 10 行

注意:未定义变量:第 10 行 C:\srv\www\test.php 中的测试

这是非常有用的。在我的情况下,第 10 行是echo $test;。 PHP 没有告诉任何关于设置错误记录器的信息。

你可以花很多时间在大型项目上指出这一点。

如果log/log 不可写,您只会看到未定义的变量通知。

我认为 PHP 可以为日志使用系统时区设置(这很明显)。

这是一个错误,是否应该报告给 PHP 团队?顺便提一句。我使用 PHP 5.3.8(不是最后一个快照)

【问题讨论】:

  • 在你的“重现代码”中 $test 永远不会被设置。复制和粘贴错误?
  • 它是为了触发错误,所以php会尝试记录它。
  • 好的,我现在明白了。为了澄清,你的问题是什么?它看起来像一个错误报告。
  • 这不是错误,而是功能请求。

标签: php timezone error-logging


【解决方案1】:

如果您的日志是可写的,则通知将触发包含格式化时间戳的日志行。此时间戳显示在您的服务器时区中。

现在看一下警告(它没有错误)。它告诉我们“我们选择 'Europe/Paris' 代替 '1.0/no DST'”。 PHP 读取配置的服务器时区(来自 /etc/timezone?)并得到“1.0/no DST”。那是没有可用的时区信息(对于 php)。相反,它使用“欧洲/巴黎”作为后备。

如果日志文件不可写,则不会发出警告,因为没有生成格式化的时间字符串。

我不知道“1.0/no DST”是否是有效的时区格式,但我不会更改 /etc/timezone 中的任何内容。

所以请不要提交错误 ;)

【讨论】:

  • 似乎是一个常见问题...刚刚搜索“1.0 no DST”并发现大量产生此警告的页面。
猜你喜欢
  • 2014-05-30
  • 1970-01-01
  • 2012-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-15
  • 1970-01-01
  • 2020-02-11
相关资源
最近更新 更多