В течение нескольких месяцев я периодически получал сообщение об ошибке «Недостаточно памяти» в приложении, находящемся в постоянной разработке & пока что имеет около 20 пользователей.
Похоже, у меня не было никаких негативных повторений, но я наконец нашел виновника.
Я не знаю, как, но у меня было представление об ошибке 404 по умолчанию, в котором обнаружился странный код, я не уверен, как я это сделал. Это представление ошибки 404 по умолчанию вызывается платформой автоматически, если кто-то использует findOrFail () и БД не находит запись. Когда страница была недоступна в моем приложении (что и должно быть, так как некоторые материалы могут быть опубликованы / неопубликованы), это представление ошибки запускалось.
Странный код был:
<!-- <div><?php var_dump($exception); ?></div> -->
<div class="text">{{$exception->getMessage()}}</div>
Совершенно странно, я знаю.
Во-первых, html-комментарии, поскольку это блейд-файл, не применяются, поэтому вызывается var_dump, несмотря на то, что он «закомментирован».
Поэтому я заменил это на это:
{{ var_dump($exception) }}
и ошибка нехватки памяти (и ошибка 500 в браузере) может быть надежно воспроизведена.
Удаление этого, и представление 404 отдает хорошо.
Заменить его на {{ dd($exception) }}
тоже отлично работает — я получаю рендер трассировки.
Так, почему строка var_dump вызывает ошибку нехватки памяти?
Что я должен сделать, чтобы исследовать это дальше?
Я на Laravel 5.3
Скорее всего, это происходит потому, что содержание $exception
переменная большая. Когда вы выгружаете переменную, PHP попытается преобразовать ее в строковое представление. Это использует много памяти.
Я не понимаю, зачем вам нужно выводить весь объект исключения. Скорее всего, вам просто нужно сообщение (которое вы получаете $exception->getMessage()
, Остальное — просто обратная трассировка и ссылки на связанные объекты и экземпляры.
Других решений пока нет …