Почитать другие заметки или статьи

Всегда найдутся люди, которые попытаются усложнить вашу жизнь. Для меня такими людьми стали разработчики компонента «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 по ссылке ниже:

https://vk.com/sitogon

А также в недавно созданной группе Telegram. Ссылка:

https://t.me/sitogonGroup

С уважением, Владимир Егоров!