2011-12-11 62 views
0

代碼重現:PHP時區錯誤,而使用錯誤記錄

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.timezonephp.ini或使用date_default_timezone_set,你會看到這樣的錯誤:

Warning: main(): It is not safe to rely on the system's timezone settings. You are required to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Europe/Paris' for '1.0/no DST' instead in C:\srv\www\test.php on line 10

Notice: Undefined variable: test in C:\srv\www\test.php on line 10

這是非常翔實的。我的情況是10行是echo $test;。 PHP沒有告訴任何有關設置錯誤記錄器的內容。

您可以在大型項目上花費大量時間指出這一點。

如果log/log不可寫,您將只能看到未定義的變量通知。

我認爲PHP可以使用日誌的系統時區設置(這會很明顯)。

Ist是一個錯誤,應該向PHP團隊報告嗎?順便說一句。我使用PHP 5.3.8(不是上次快照)

+0

在你的「代碼重現」$ test從未設置。複製並粘貼錯誤? – FakeRainBrigand

+0

它會觸發一個錯誤,所以php會嘗試記錄它。 – Buddy

+0

好吧,我現在明白了。澄清一下,你在這裏有什麼問題?它看起來像一個錯誤報告。 – FakeRainBrigand

回答

1

如果您的日誌是可寫的,則通知將觸發包含格式化時間戳的日誌行。此時間戳顯示在您的服務器時區中。

現在看看警告(這是沒有錯誤的)。它告訴「我們選擇'歐洲/巴黎'代替'1.0 /沒有DST'」。 PHP讀取已配置的服務器時區(來自/ etc/timezone?)並獲得「1.0 /無DST」。這是沒有可用的時區信息(用於PHP)。相反,它使用「歐洲/巴黎」作爲後備。

如果日誌文件不可寫,則不會生成警告,因爲沒有生成格式化的時間字符串。

我不知道「1.0/no DST」是否是有效的時區格式,但我不會在/ etc/timezone中更改任何內容。

所以請不要提交bug;)

+0

似乎是一個常見的問題...只是搜索「1.0沒有DST」,並發現噸的網頁,產生這種警告。 – hacksteak25