register_shutdown_function
- chloris
- Člen | 23
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:
- buď exit odstranit, pokud není nutný
- 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
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)
- boob
- Člen | 21
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
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)