Problém s PHP 5.2.0–8+etch13

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

Na fóru David píše že verze 5.2.0 by měla být podporovaná, ale asi je špatně ještě něco, protože start aplikace končí chybou:

PHP Fatal error: Uncaught exception 'ApplicationException' with message 'An error occured while executing error-presenter' in ... htdocs/libs/Nette/Application/Application.php:186]
Stack trace:
#0 /data/www/kulaty.net/htdocs/app/bootstrap.php(94): Application->run()
#1 /data/www/kulaty.net/htdocs/www/index.php(16): require('/data/www/kulat...')
 #2 {main}

Přitom v Requirements Checker ani v phpinfo žádný problém nevidím.

Řešilo se to ještě v jednom tématu zde na fóru, ale už je bohužel uzavřeno a řešení je hodně obecné.

Verzi Nette jsem zkoušel 0.8 i 0.9, aktuálně Nette Framework 0.9 (revision 332)

Nějaký nápad?

Ještě dodám že hosting je poměrně cenově výhodný, takže změna je až krajní řešení.

romansklenar
Člen | 655
+
0
-

Toto nebude problém PHP ;) doporučuju nastartovat laděnku a podívat se na výjimku, která zhodila ten error-presenter v části Caused-By.

Příště lépe hledat ;)

PetrP
Člen | 587
+
0
-

Jinými slovy kdyby předchozí příspěvek nebyl pochopen.
Po nějaké chybě se volá ErrorPresenter, v kterém nastává taky chyba; aby se takle necyklilo do nekonečná tak se aplikace násilně ukončí. Laděnku nastartujete takto:

Debug::enable(Debug::DEVELOPMENT);

Případně ještě zakažte aplikaci zachytávat chyby

Environment->getApplication()->catchExceptions =false;

leninzprahy
Člen | 150
+
0
-

Díky za rychlé a hlavně přínosné reakce, problém opravdu nebyl ve verzi PHP, ale v připojení k databázi.

Laděnku jsem měl nastartovanou a nastavenou aby logovala Debug::enable(NULL, '%logDir%/php_error.log');

až nastavením Environment::getApplication()->catchExceptions = false; se do logu dostala DibiDriverException

Část Caused-By jsem jaksi přehlédl a proto jsem nenašel první chybu
 Cannot load presenter 'Error', class 'ErrorPresenter' was not found ....

z čehož si odnáším ponaučení laděnku čti pozorně a vždy až do konce


Mám ale ještě jeden dotaz, pokud laděnku nastavím Debug::enable(Debug::DEVELOPMENT); a nezakážu aplikaci zachytávat vyjímky, laděnka se neukáže a start aplikace končí s 500 Internal Server Error

Čekal bych, že mi bude vesele vyskakovat.

Ještě jednou děkuji za odpovědi, a prosím o přejmenování tohoto tématu nějak výstižněji, např. „Problém se zachytáváním vyjímek na produkčním serveru“, pokud je to možné.

Příště se budu snažit hledat lépe :)

kravčo
Člen | 721
+
0
-

leninzprahy napsal(a):

… laděnka se neukáže a start aplikace končí s 500 Internal Server Error

Čekal bych, že mi bude vesele vyskakovat.

Ja som mal rovnaký problém pri IIS+PHP, aj v ladiacom režime to hádzalo vlastnú 500 stránku servera. Mne pomohlo dočasne! vypnúť posielanie HTTP headra 500, zamenil som ho za 200 (resp. zakomentoval) a ladenka sa zobrazila. Samozrejme ladenka s výpisom do prehliadača na produkčnom servri nie je nič moc… Síce by ju webboty vďaka

<meta name="robots" content="noindex,noarchive">

nemali indexovať, ale aj tak s týmto opatrne…

PetrP
Člen | 587
+
0
-

leninzprahy napsal(a):

Mám ale ještě jeden dotaz, pokud laděnku nastavím Debug::enable(Debug::DEVELOPMENT); a nezakážu aplikaci zachytávat vyjímky, laděnka se neukáže a start aplikace končí s 500 Internal Server Error

V první řadě Debug::DEVELOPMENT nastavovat pouze v takto krizových situacích, místo něho volit Debug::DETECT (neboli NULL). A buď nechat rozhodovat aplikaci samotnou, nebo si nastavovat vývojový/produkční prostředí v Environment např podle ip:

if ($_SERVER['REMOTE_ADDR']=='0.0.0.0') Environment::setMode('production',false);

Tak v případě že výjimky zachytává aplikace, tak laděnku k slovu nepustí, ale snaží se spustit ErrorPresenter (Presenter::$errorPresenter) a když ho nenajde tak vyhodí 500.

Čekal bych, že mi bude vesele vyskakovat.

Laďenka v takovémto případě jen loguje.

Editoval PetrP (2. 6. 2009 19:56)