Nefunkční nastavení defaultní timezone v config.ini

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Petr Mašát
Člen | 101
+
0
-

Ahoj všichni,
omlouvám se asi za hloupý dotaz, ale už to řeším druhý večer a prolezl jsem snad už všechny fóra jenž tu byli a nikde jsem nenalezl přesně to co hledám.
Mám problém s nastavením defaltní timezone v souboru config.ini, kde i když nastavím

[common]
php.date.timezone = "Europe/Prague"

tak mi stránka padne do chyby a v logu se objeví

[2010-04-13 23-20-32] PHP Fatal error: Uncaught exception 'FatalErrorException' with message 'DateTime::__construct(): It is not safe to rely on the system's timezone settings. Please use the date.timezone setting, the TZ environment variable 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/Berlin' for 'CEST/2.0/DST' instead' in /home/www/aikidohostivar.cz/public_html/beta/libs/Nette/loader.php:4164

Jediné jak to obejít je dát do bootstrap.php na začátek deklaraci

date_default_timezone_set('Europe/Prague');

ale to mi přijde docela jako prasárna. Netuší někdo pls. kde dělám chybu?

Díky moc,
Petr MAŠÁT

Editoval tachyon (13. 4. 2010 23:33)

marek.dusek
Člen | 99
+
0
-

A nemáš v bootstrapu před Environment::loadConfig() něco jiného, co ti na nějaký datum sáhne?

EDIT: Teď se dívám, že ti to vyhodil už loader.php, který je předpokládám to první, co v bootstrapu je. Takže jinak – nevím, jestli to něco řeší, ale možná záleží na pořadí v configu, aby to bylo co nejvíc nahoře? I když to uř je velká divočina ;)

A temp si smazat zkoušel? ;)

Editoval marek.dusek (13. 4. 2010 23:43)

Petr Mašát
Člen | 101
+
0
-

V tom loader.php to bylo proto že jsem použil nette minified. Náhrál jsem tam nekompresenou verzi a nyní je zápis v logu:

[13-Apr-2010 23:54:20] PHP Fatal error:  Uncaught exception 'FatalErrorException' with message 'DateTime::__construct(): It is not safe to rely on the system's timezone settings. Please use the date.timezone setting, the TZ environment variable 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/Berlin' for 'CEST/2.0/DST' instead' in /home/www/aikidohostivar.cz/public_html/beta/libs/Nette/Tools.php:70
Stack trace:
#0 [internal function]: Debug::_errorHandler(2048, 'DateTime::__con...', '/home/www/aikid...', 70, Array)
#1 /home/www/aikidohostivar.cz/public_html/beta/libs/Nette/Tools.php(70): DateTime->__construct('+ 30 minutes')
#2 /home/www/aikidohostivar.cz/public_html/beta/libs/Nette/Web/User.php(204): Tools::createDateTime('+ 30 minutes')
#3 /home/www/aikidohostivar.cz/public_html/beta/app/presenters/BasePresenter.php(52): User->setExpiration('+ 30 minutes')
#4 /home/www/aikidohostivar.cz/public_html/beta/libs/Nette/Application/Application.php(138): BasePresenter->__construct()
#5 /home/www/aikidohostivar.cz/public_html/beta/app/bootstrap.php(75): Application->run()
#6 /home/www/aikidohostivar.cz/public_html/beta/document_root/index.php(13): require('/home/www/aikid...')
#7 {main}

posílám rovnou i to jak je nyní napsán config.ini:

[common]
php.date.timezone = "Europe/Prague"
php.iconv.internal_encoding = "%encoding%"
php.mbstring.internal_encoding = "%encoding%"
php.include_path = "%appDir%;%libsDir%"
variable.tempDir = %appDir%/cache

[development]
database.driver = postgre
database.host = "localhost"
database.username = "postgres"
database.password = "****"
database.database = "template1"
database.lazy = TRUE
database.charset = utf8
database.result:objects = TRUE
service.Nette-Security-IAuthenticator = Users
service.Nette-Security-IAuthorizator  = Permission

[production < development]
database.host = "pg1.tojeono.cz"
database.username = "aikidohostivarcz"
database.password = "****"
database.database = "aikidohostivarcz"

Nikde jinde s nastavováním timezone nic nedělám.
Pro jistotu jsem ještě nyní stáhl aktuální stabilní verzi nette a hodil to tam, jestli jsem někde něco nezmšil a bohužel ne : (

Vtipné na tom je že na lokále mi to funguje, ale jakmile to hodím na server tak je zle. Nemůže to být nějaký nastavením serveru?

Editoval tachyon (14. 4. 2010 0:04)

marek.dusek
Člen | 99
+
0
-

Tady je vidět, že to spadne až po volání application->run() – máš před tím v bootstrapu explicitní načtení configu, tj. něco jako Environment::loadConfig()?

Petr Mašát
Člen | 101
+
0
-

Ahoj,

Environment::loadConfig();

jsem v bootstrap.php neměl. Přidal jsem to rovnou za volání

require LIBS_DIR . '/Nette/loader.php';

ale bohužel nepomohlo. Pořád ta stejná hláška. Nahrál jsem celý projekt na http://data.aikidohostivar.cz/beta.zip – prosím nekamenuj mě za kód, teprve se učím : )

David Grudl
Nette Core | 8147
+
0
-

Změň [development] na [development < common], jinak se ti sekce common vůbec nenačte.

Petr Mašát
Člen | 101
+
0
-

Změnil jsem config.ini na

[common]
php.date.timezone = "Europe/Prague"
php.iconv.internal_encoding = "%encoding%"
php.mbstring.internal_encoding = "%encoding%"
php.include_path = "%appDir%;%libsDir%"
variable.tempDir = %appDir%/cache

[development < common]
database.driver = postgre
database.host = "localhost"
database.username = "postgres"
database.password = "***"
database.database = "template1"
database.lazy = TRUE
database.charset = utf8
database.result:objects = TRUE
service.Nette-Security-IAuthenticator = Users
service.Nette-Security-IAuthorizator  = Permission

[production < development]
database.host = "pg1.tojeono.cz"
database.username = "aikidohostivarcz"
database.password = "***"
database.database = "aikidohostivarcz"

bohužel žádná změna k lepšímu : (

David Grudl
Nette Core | 8147
+
0
-

Aha, déle než rok hlášený bug. Nastavení funkcí má vyšší prioritu. Fixed.

Petr Mašát
Člen | 101
+
0
-

Super, alespoň si nepřipadám jako totální blbec jenž něco přehlédl : )
Dáš prosím tě tuhle opravu do Nightly Builds verze nette? A nebo mohu si někde jinde sosnout opravenou verzi?
Díky moc.

David Grudl
Nette Core | 8147
+
0
-

Jj, je to ve všech nightly builds.

Petr Mašát
Člen | 101
+
0
-

Super, už to funguje. Díky moc za pomoc.

Endrju
Člen | 147
+
0
-

Mám také problém na toto téma a nevím si rady. Když načtu stránku, zobrazí se:

Strict Standards: DateTime::__construct() [datetime.--construct]: It is not safe to rely on the system's timezone settings. Please use the date.timezone setting, the TZ environment variable 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 D:\webserver\aaa\libs\Nette\Utils\Tools.php on line 69

Strict Standards: date() [function.date]: It is not safe to rely on the system's timezone settings. Please use the date.timezone setting, the TZ environment variable 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 D:\webserver\aaa\libs\Nette\Utils\Tools.php on line 66

Strict Standards: DateTime::__construct() [datetime.--construct]: It is not safe to rely on the system's timezone settings. Please use the date.timezone setting, the TZ environment variable 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 D:\webserver\aaa\libs\Nette\Utils\Tools.php on line 66

Používám Nette 0.9.6 a PHP 5.2.11

V config.ini mám nastaveno:

[common]
; PHP configuration
php.date.timezone = "Europe/Prague"
php.iconv.internal_encoding = "UTF-8"
php.mbstring.internal_encoding = "UTF-8"
;php.default_charset = "UTF-8"

...

A bootstrap.php začíná takto:

require LIBS_DIR . '/Nette/loader.php';

$session = NEnvironment::getSession();
$session->setExpiration("+ 14 days");
$session->setSavePath(APP_DIR . '/../tmp/');
if (!$session->isStarted()) { $session->start(); }

Chybu to začalo vypisovat až po tom co jsem přídal do bootsrapu řádek $session->setExpiration("+ 14 days");

Děkuji za pomoc !

marek.dusek
Člen | 99
+
0
-

Nechybí tam před tou inicializací session nějaké Environment::loadConfig(); ?

Endrju
Člen | 147
+
0
-

@marek.dusek: Ano, máš pravdu. Přitom to dává smysl celkem :). Nenapadlo mě to a bylo to tím, díky.

Přesunul jsem to nastavení session až za načtení configu.