使用错误记录器时PHP时区错误

时间:2011-12-11 20:00:21

标签: php timezone error-logging

重现的代码:

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可写,而您未在date.timezone中设置php.ini或使用date_default_timezone_set,则会看到此错误:

  

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

     

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

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

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

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

我认为PHP可以使用日志的系统时区设置(这有点显而易见)。

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

1 个答案:

答案 0 :(得分:1)

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

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

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

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

所以请不要提交错误;)