register_shutdown_function

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

Ahoj,

potřebuji zaregistrovat vlastní handler do register_shutdown_function(). Jak známo z manuálu k této funkci, může být registrováno několik handlerů, které jsou pak v patřičném pořadí zavolány. Doposud v pořádku, ALE…

Pokud dojde v aplikaci k chybě (myšleno FATAL ERROR – tedy např. volání neexistující funkce), tak na volání mnou registrovaného handleru nedojde. Já bych ale potřeboval, aby i přesto došlo, protože potřebuju i v tomto případě fatální chyby mít pod kontrolou, co se dostane klientovi na výstup.

Co mi v tom brání? Jeden řádek (č. 456 – ve stable verzi 2.0.3)s obsahem:

exit(255);

ve třídě Nette\Diagnostics\Debugger a metodě _exceptionHandler.

Ten totiž „chcípne“ nadobro provádění všeho po něm a já mám smůlu :-).

Můj dotaz tedy zní, zda je tento exit klíčový a důležitý, nebo jak vyřešit jeho obejití?

Návrhy ode mě jsou dva:

  1. buď exit odstranit, pokud není nutný
  2. udělat nějaký příznak v podobě statické veřejné property třídy Debugger, který bude možné si nastavit na FALSE. a tím vypnout exit

Co vy na to, jako Nettisté? :-)
Díky!

Filip Procházka
Moderator | 4668
+
0
-

Nic se mazat nebude. Mám pro tebe lepší řešení

Nette\Diagnostics\Debugger::$onFatalError[] = function (\Exception $e) {
	echo "weehee";
};

Další možností je Application::$onShutdown, záleží co potřebuješ.

Editoval HosipLan (14. 7. 2012 16:54)

chloris
Člen | 23
+
0
-

Tak $onFatalError jsem přehlídl, to je přesně to, co jsem potřeboval. Díky moc! :-)

boob
Člen | 21
+
0
-

dakujem, toto som hladal aj ja, len jedna otazka navyse:

da sa nejako zbavit akehokolvek vypisu pri chybe? aby som mohol v onFatalError nieco vypisat a (to sa vrati ako response klientskej strane) a nemal predtym HTML stranku s 500-vkou pripadne „ERROR: the server encountered an internal error and was unable to complete your request“, ak zapnem consoleMode?

potrebujem proste v pripade, ze nastane chyba (napr syntax error) spustit tu moju funkciu v onFatalError s tym, ze vystupom bude len to, co si tam napisem ja a nie to, co tam este predtym da Nette

vdak

boob
Člen | 21
+
0
-

nepouzivame Application, je mozne to docielit aj bez toho?

EDIT //

pozeral som _exceptionHandler, a skusil som nastavit

<?php
header('Content-Type: text/plain');
?>

v tomto pripade funkcia isHtmlMode vrati false a ziadne vypis sa nevykona, takze vysledok je taky, ako potrebujem, ale asi to nebude zrovna najlepsie riesenie, kedze v tej anonymnej funkcii v onFatalError to pouzit nemozem, jedine pred nou

Editoval boob (13. 11. 2012 17:24)