Záludnou částí toho bylo tvrdošíjné odmítání prohlížeče odhalit jakoukoli formu chybové zprávy. Když se to stane, rád přejdu na příkazový řádek a vyzkouším to, čímž vyloučím webový server jako proměnnou.
Z chatu jsme se dozvěděli, že příkazový řádek zobrazil chybu podle očekávání, ale neudělal to elegantně:chyba byla vypsána a skript byl zastaven. To je těžké selhání, které nelze připsat webovému serveru.
Se zavedením \Throwable
, scénářů, kdy PHP tvrdě umírá, je stále méně a dále. Takže ve snaze zachytit umírající dech PHP jsme implementovali funkci register_shutdown_function
který vytáhl error_get_last
ve snaze zjistit, co, pokud vůbec něco, bylo řečeno těsně před výbuchem.
To krátce odhalilo chybovou zprávu v prohlížeči (tentokrát pomocí jiného prohlížeče). To však nebylo opakovatelné. Názor v tomto bodě byl ukládání do mezipaměti:composer dump-autoload
problém vyřešen!
Mám podezření, že se stalo toto:
Eloquent
vyvolal výjimku- PHP to probublávalo prostřednictvím Laravelových tříd zpracování výjimek
- V určitém okamžiku se PHP pokusilo načíst třídu, která nebyla v autoloaderu
- PHP těžce havarovalo (toto je jeden z případů, kdy PHP 7.0 kauci)
Spuštěním composer dump-autoload
, všechny „chybějící“ třídy byly přeneseny do působnosti automatického zavaděče a při opětovném pokusu došlo ke správné sekvenci kódu.