Всегда найдутся люди, которые попытаются усложнить вашу жизнь. Для меня такими людьми стали разработчики компонента «RO CSVI», которые программно отключили отладку в Joomla. В итоге, при переезде на PHP 8, я столкнулся с тем, что не мог увидеть ошибки в компоненте, которых там был вагон и маленькая тележка.
Вместо текста и номера строки с ошибкой я получал стандартную, но красивую страничку с текстом: «The server returned a "500 - Whoops, looks like something went wrong."».
Включение отладки и максимального отображения ошибок в Joomla не спасало ситуацию.
Расследование зашло в тупик и решено было пойти от обратного.
Я решил посмотреть, кто конкретно вызывает шаблон с ошибкой. И здесь хочу сделать небольшое отступление.
Как узнать, кто в PHP вызвал файл или функцию или метод
Поскольку цель этой заметки — быть шпаргалкой, хочу попутно напомнить про полезнейшею функцию, про которую не все помнят. А некоторые и не знают.
Речь идет о функции debug_backtrace.
На просторах сети много всевозможных руководств, которые рассказывают о том, как пользоваться данной функцией.
В этой связи я углубляться в данную тему не буду.
Но скажу:
После вызова функция возвращает ассоциативный массив, где будет путь к вызывавшему файлу, название функции, строка, с которой был вызов и много другой информации.
При этом, если попытаться вызвать функцию в Joomla как то так:
print_r(debug_backtrace());
...то, скорее всего, вы получите всё ту же 500 ошибку.
Поэтому приведу короткий фрагмент кода, который поможет отобразить путь к вызывающим файлам, названия методов и номер строки.
$backtrace = debug_backtrace(); foreach ($backtrace as $item) { echo $item['file'].'<br>'; echo $item['line'].'<br>'; echo $item['function'].'<br>'; }
Как принудительно включить отладку в Joomla
Вернёмся к теме этой заметки.
Для того, чтобы в Joomla принудительно включить отладку, нам придётся отредактировать системный файл Joomla.
Мера — это вынужденная. После отображения ошибок и их устранения мы всё вернём, как было.
Необходимо отредактировать файл:
libraries/vendor/symfony/error-handler/ErrorRenderer/HtmlErrorRenderer.php
Находим в нём метод «render».
В самом начале добавляем строчку:
$this->debug = true;
Должно получиться что то вроде:
Теперь можно насладиться отображением ошибок там, где они должны быть при включенной отладке.
Ещё раз хочу напомнить:
После того, как все ошибки исправлены и необходимости в отладке больше нет, системный файл Joomla возвращаем в исходное состояние. То, которое было до наших правок.
Заключение
Напоминаю!
Если у вас остались вопросы и предложения, их всегда можно озвучить в группе VK по ссылке ниже:
А также в недавно созданной группе Telegram. Ссылка:
С уважением, Владимир Егоров!