Отслеживание ошибок — копаем глубже

Один из законов Мерфи гласит: все, что может сломаться, ломается. Поэтому иногда случается так, что на сайте, где все работало без проблем, вдруг возникают ошибки. А уж когда ведется активная работа над изменением сайта, то это и вовсе неизбежно.

Поэтому всем, кто делает сайты на Альто очень полезно будет почитать статью «Работа над ошибками» в Alto CMS.

Но с момента написания той статьи в движок были добавлены новые возможности, позволяющие еще лучше находить и понимать возникающие на сайте ошибки (эта статья пишется для версии 1.1.13). Для начала важно учесть, что дополнительный механизм отслеживания ошибок включается заданием константы DEBUG=1. Это можно сделать двумя способами:

1) Добавить файл engine/config.defines.php такого содержания:
<?php
define('DEBUG', 1);
2) В файл /index.php сразу после первой строки с <?php добавить строчку:
define('DEBUG', 1);
Оба варианта работают совершенно одинаково, выбирайте, какой из них вам больше нравится.

После этого движок будет работать в режиме отладки. Что вам это дает:

Дополнительная информация в логах SQL-запросов
Если у вас включено логгирование SQL-запросов (конфиг-параметр sys.logs.sql_query=true), то в него дополнительно будет записываться информация, в каком конкретно месте движка вызывается SQL-запрос. Ведь ошибки в логике работы сайта могут заключаться и в том. что где-то неверно формируется запрос к базе данных. И эта опция поможет быстрее найти источник ошибочного запроса.

Проверка подключаемых файлов на «UTF-8 without BOM»
Помните — все файлы движка должны быть в формате «UTF-8 without BOM». Очень распространенная ошибка (особенно среди новичков) — правка файлов в стандартном Блокноте Windows и запись в неверном формате. И эти файлы при подключении могут давать самый непредсказуемый эффект. Чтобы это обнаружить, нужно добавить в конфиг-файл app/config/config.local.php такую строку:
$config['sys']['include']['check_file'] = true;
И тогда все подключаемые файлы будут предварительно проверяться, и в случае обнаружения проблем информация об этом будет записываться в файл ошибок error.log. Правда, тут есть нюанс: эта проверка будет выполняться, только если файл подключается средствами движка, т.к. одной из следующих функций: F::IncludeFile(...) или F::IncludeLib(...) (или через их аналоги — F::File_IncludeFile(...) или F::File_IncludeLib(...)).

Проверка установки кук
Известно, что если до момента установки куки в PHP-скрипте был какой-то вывод, то кука не установится. И если включен отладочный режим, то движок, если кука не установлена, сделает соответствующую запись в лог ошибок. Более того, постарается определить, где именно (в каком файле и в какой строке) был вывод до установки куки и запишет соответствующую информацию в лог-файл.

Похожие статьи

  • Бесплатный плагин Dev — специально для разработчиков
    Я уже упоминал как-то об этом плагине, но вскользь. Сейчас хочу рассказать о нем чуть подробнее. Делал плагин для себя, но, думаю, многим разработчикам, имеющим дело с Альто, он может быть полезен. Что умеет этот...
  • "Работа над ошибками" в Alto CMS
    Тем, кто занимается разработкой и отладкой под Альто, полезно будет узнать о некоторых нюансах обработки ошибок в движке, чтоб максимально эффективно использовать эти возможности. Если вы еще не в курсе, то самое...
  • Для тех кто не может расстаться с Livestreet и Altocms
    Долгое время с предубеждением относился к движку instantcms. Уже не помню в чем были причины, но это уже и не важно. А важно то, что LS и Alto загнулись окончательно, а instantcms живет и здравствует. Думаю могу дать ...
  • Новый функционал
    Нашел в комментариях разговор(2014 года) про расширение, написали прям в точку чего не хватает: Слишком размытый вопрос, чтоб на него можно было конкретно ответить. Возможности админа нужно расширять не для того,...

2 комментария

+1
Добавить файл engine/config.defines.php такого содержания:
Можно создать этот файл и добавить в репозиторий, раз он такой полезный. Кстати, когда я его создал первый раз по инструкции, а потом, через некоторое время, долго его искал. Может его в папку app перетащить лучше?
define('DEBUG', 1);
Почему не defined('DEBUG') or define('DEBUG', 1);?
нужно добавить в конфиг-файл app/config/config.local.php такую строку:
Можно автоматом включать, если включен дебаг.
0
Может его в папку app перетащить лучше?
Нет, не получится. Он подгружается ДО базового конфига engine/config.php, когда еще неизвестен путь к папке приложений.

Можно автоматом включать, если включен дебаг.
А вот это, пожалуй, стоит делать
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.