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

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

Поэтому всем, кто делает сайты на Альто очень полезно будет почитать статью «Работа над ошибками» в 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-скрипте был какой-то вывод, то кука не установится. И если включен отладочный режим, то движок, если кука не установлена, сделает соответствующую запись в лог ошибок. Более того, постарается определить, где именно (в каком файле и в какой строке) был вывод до установки куки и запишет соответствующую информацию в лог-файл.

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


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, когда еще неизвестен путь к папке приложений.

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