Het lastige hiervan was de koppige weigering van de browser om enige vorm van foutmelding te onthullen. Wanneer dat gebeurt, ga ik graag naar de opdrachtregel en probeer het, waardoor de webserver als variabele wordt geëlimineerd.
Uit chat hebben we geleerd dat de opdrachtregel de fout vertoonde zoals verwacht, maar dit niet netjes deed:de fout werd uitgevoerd en het script werd stopgezet. Dat is een harde crash, een die niet aan de webserver kan worden toegeschreven.
Met de introductie van \Throwable
, worden de scenario's waarin PHP hard sterft steeds minder en verder tussen. Dus, in een poging om de laatste adem van PHP op te vangen, hebben we een register_shutdown_function
geïmplementeerd dat trok error_get_last
in een poging om erachter te komen wat er werd gezegd net voor het ontploffen.
Dit onthulde kort de foutmelding in de browser (dit keer met een andere browser). Dit was echter niet voor herhaling vatbaar. Het inzicht op dit punt was caching:composer dump-autoload
het probleem opgelost!
Ik vermoed dat dit het volgende is:
Eloquent
een uitzondering gegooid- PHP borrelde dat op via Laravel's exception handling-klassen
- Op een gegeven moment probeerde PHP een klasse te laden die niet in de autoloader stond
- PHP crashte hard (dit is een van die gevallen waarin PHP 7.0 vastloopt)
Door composer dump-autoload
. uit te voeren , werden alle "ontbrekende" klassen in het gezichtsveld van de autoloader gebracht en, toen het opnieuw werd geprobeerd, gebeurde de juiste codereeks.