Tracy – vypnutí posílání notice

motorcb
Člen | 552
+
0
-

Ze serveru mi chodí emailem chyba:

PHP Warning: ini_set(): Headers already sent. You cannot change the session module's ini settings at this time in /data/web/virtuals/151319/virtual/www/subdom/help/vendor/nette/http/src/Http/Session.php:394

Je tam nějaký bordel v knihovnách. Nedaří se mi opravit příčinu. Opravím alespoň následek :-) Aplikace normálně funguje.

Jak zakážu aby Tracy posílal warning emailem?

Vyčetl jsem že by to mělo být příkazem: Tracy\Debugger::$strictMode = E_ALL & & ~E_USER_NOTICE

Ale kam to zapsat? Mám Nette 3.0

Díky :-)

Zrny
Člen | 5
+
0
-

Podle mě pozdě voláš Debugger::enable() ale ještě předtím něco posíláš… Nevím jaká je struktura tvého kódu ale enable i $strictMode by jsi měl nastavovat někde v bootstrap souboru…

To odhaduju z dostupných informací…

Marek Bartoš
Nette Blogger | 1280
+
+1
-

Neopravil bys následek, jen bys ho ignoroval. Navíc je to celkem vážná chyba, ač to php považuje jen za warning. Nejspíš ti nefunguje nějaká komponenta využívající session.

Opravit to můžeš tak, že z bluescreenů, které ti Tracy ukládá do složky s logy zjistíš, s jakým presenterem se chyba děje a nejpozději v beforeRender() session nastartuješ. Komponenta využívající session by ideálně měla ověřit, zda je session nastartovaná a pokud není, tak se bez ní buď obejít a nebo vyhodit výjimku vysvětlující, že ji potřebuje.

Případně může být problém ještě v tom, že se někde vykresluje stránka dřív, než v render() a s tím by ti měl pomoc OutputDebugger z Tracy. Ten aktivuješ v Bootstrapu.

Jinak to nastavení Tracy bys dal též do Bootstrapu, ale není dobrý nápad řešit tvůj problém takto.

Editoval Mabar (28. 4. 2021 16:29)

motorcb
Člen | 552
+
0
-

Kámo díky, problém byl v tom že se render() vykreslil dříve než session.
Podle bluescreenu jsem rychle našel, kde je problém.

Díky moc! Máte u mne pivo :-)

Marek Bartoš napsal(a):

Neopravil bys následek, jen bys ho ignoroval. Navíc je to celkem vážná chyba, ač to php považuje jen za warning. Nejspíš ti nefunguje nějaká komponenta využívající session.

Opravit to můžeš tak, že z bluescreenů, které ti Tracy ukládá do složky s logy zjistíš, s jakým presenterem se chyba děje a nejpozději v beforeRender() session nastartuješ. Komponenta využívající session by ideálně měla ověřit, zda je session nastartovaná a pokud není, tak se bez ní buď obejít a nebo vyhodit výjimku vysvětlující, že ji potřebuje.

Případně může být problém ještě v tom, že se někde vykresluje stránka dřív, než v render() a s tím by ti měl pomoc OutputDebugger z Tracy. Ten aktivuješ v Bootstrapu.

Jinak to nastavení Tracy bys dal též do Bootstrapu, ale není dobrý nápad řešit tvůj problém takto.

Marek Bartoš
Nette Blogger | 1280
+
+2
-

@motorcb Není zač. Je to dost častý problém, též jsem na něj mnohokrát narazil, než jsem si zvykl. Mám o tom teď rozepsaný dost obsáhlý článek na nette blog, circa během týdne vyjde :)

Až budou posoboty místo online zase v Praze, tak jsem pro pivo. Ale kdybys chtěl podpořit tvorbu opensource a tím i moje příspěvky do Nette, tak je to možné

Editoval Marek Bartoš (1. 5. 2021 13:51)