重现的代码:
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(不是最后的快照)
答案 0 :(得分:1)
如果您的日志是可写的,则通知将触发包含格式化时间戳的日志行。此时间戳显示在服务器时区中。
现在看一下WARNING(没有错误)。它告诉“我们选择'欧洲/巴黎'为'1.0 /没有DST'而不是”。 PHP读取配置的服务器时区(来自/ etc / timezone?)并获得“1.0 /无DST”。这是没有可用的时区信息(对于PHP)。相反,它使用“欧洲/巴黎”作为后备。
如果日志文件不可写,则不会引发警告,因为没有生成格式化的时间字符串。
我不知道“1.0 /无DST”是否是有效的时区格式,但我不会在/ etc / timezone中更改任何内容。
所以请不要提交错误;)