- Имя: Отладка
- Тип: String
- По умолчанию:
- Доступен в: Revolution 2.2.0+
Управляет включением/выключением отладки в MODX и/или устанавливает уровень PHP отладки error_reporting
.
Возможные варианты: » = использовать текущий уровень error_reporting
, ‘0’ = выключена отладка (error_reporting = 0
), ‘1’ = включена отладка (error_reporting = -1
), или любой другой корректный уровень error_reporting
(целое число).
Посмотрите также¶
- PHP error-reporting
Open COllective
Support the team building MODX with a monthly donation.
The budget raised through OpenCollective is transparent, including payouts, and any contributor can apply to be paid for their work on MODX.
Backers
Budget
$400 per month—let’s make that $500!
Learn more
Все оказалось ровно также просто, как и странно. Непонятно почему, но MODx решил изменить свои настройки выполняя это простое действие, которое раньше происходило без сбоев.
Итак, что нужно делать.
- Зайти в phpMyAdmin в базу данных, где хранятся данные вашего сайта.
- Найти таблицу «modx_system_settings». Если вы выбирали другой префикс, то она будет выглядеть так: «ПРЕФИКС_system_settings».
- Нажимаем кнопку «Обзор»
- Листаем примерно на третью страницу
- Находим поле «validate_referer». Если оно установлено в 1 — меняем на 0.
- Сохраняем, проверяем.
Должно получиться.
Как включить отображение ошибок в MODx
Если ваш сайт поломался и вы не понимаете в чем дело — нужно продиагностировать его. Нужно понять что не так прежде чем пытаться чинить. PHP и MODx имеют механизмы отлавливания и отображения ошибок, но эти механизмы в MODx по-умолчанию отключены. Чтобы включить их, нужно сделать ряд действий.
Если вы разрабатываете свой сниппет, вам достаточно включить две строки в любом месте (лучше в начале) сниппета.
error_reporting(E_ALL | E_STRICT);
ini_set('display_errors', 1);
Эти две строки с большой долей вероятности включат отображение всех ошибок и предупреждений, которые найдет php.
Если вы просто пользователь сайта — создайте новый сниппет. Назовите его, например, ‘Debug’, заполните его вышеописанными строками кода и включите в шаблон страницы или любой чанк, участвующий в ее формировании:
[[Debug]]
Таким образом вы включите отображение ошибок там, где вызывается этот сниппет.
Зачастую включение этих строк в скрипт выводит сообщение:
Parse error: syntax error, unexpected ')' in /path2site/assets/plugins/phx/phx.parser.class.inc.php(220) : eval()'d code on line 1
Parse error: syntax error, unexpected ')' in path2site/assets/plugins/phx/phx.parser.class.inc.php(226) : eval()'d code on line 1
Не пугайтесь. Эта ошибка phx. Она, кажется, никак не влияет на работу сайта и самого phx, так что можно не обращать на нее внимания.
Но вот если вы увидели другие ошибки — это уже тревожный знак. Для начала попробуйте загуглить точный текст ошибки (поиск в кавычках). Разумеется, не надо включать в поисковую фразу то, что уникально для вашего сайта. Например, путь к файлу на сервере. Включайте только значимый текст. Например «Parse error: syntax error, unexpected ‘)’ in». Этого будет достаточно чтобы найти много материалов для изучения.
Вообще, я говорили и говорю что когда сталкиваешься с чем-то неизвестным, главное что нужно — это получить информацию. На основе информации всегда можно либо найти проблему, либо найти еще информации. При нахождении проблемы остается только найти оптимальный способ ее решения.
Всегда нужно помнить что с огромной долей вероятности ваша проблема уже была у кого-то и он ее решил. И это есть в сети. Пусть не на русском, на английском, но почти всегда ответ есть. Например, способ решения задачи из начала поста я нашел на буржуинском сообществе MODx, на форуме. Это была чуть ли не первая ссылка в гугле.
Поэтому когда у вас что-то не работает — не бойтесь, ищите, узнавайте, разбирайтесь. Конечно, стоит поостеречься вслепую вносить какие-то изменения в вашу систему, если не понимаете что эти изменения делают. Так можно не только починить сайт, но и доломать его окончательно так, что проще будет новый сделать. Вдруг вам какой-нибудь шутник подскажет скрипт для удаления всех данных? Или, хуже, для отправки логина-пароля администратора ему на e-mail? Так что будьте внимательны и не доверяйте всему, что пишут на заборе в интернете.
Самостоятельное решение проблем или использование знаний специалистов?
Когда вы сталкиваетесь с проблемой, у вас есть два выхода — взять на себя ответственность по исправлению ошибки, либо попросить кого-то, кто опытней (предполагается), сделать все за вас. В менеджменте это называется «делегировать». Люблю это слово:)
Понятно, что если вы делаете сами, вы делаете долго, без гарантии исправления и можете сделать не вполне верно. Коряво, то есть. Но с другой стороны, если вы самостоятельно решаете проблему, вы получаете много печенек. Вы получаете ценный опыт, вы лучше разбираетесь в собственной системе. Вы получаете знания, которые можно использовать при исправлении другой, может, совсем иной ошибки на другом сайте в следующей жизни. И главное — вы получаете удовольствие от того, что сами сусами.
С другой стороны, исправление проблемы профессионалом будет стоить вам денег, но проблема будет исправлена быстро и, скорее всего, качественно. Конечно, гарантии вам никто не даст, но на то они и узкие специалисты чтобы уметь что-то лучше, чем специалисты другой области или широкого профиля.
При выборе метода я бы ориентировался на срочность. Если у вас интернет магазин и вы теряете прибыль — исправлять ошибку нужно срочно. Не жалко заплатить эксперту, чтобы тот быстро все поправил. Потом можно доплатить чтобы объяснил что именно он сделал и где была проблема. Так вы сэкономите время и получите часть плюшек от варианта «сделай сам».
С другой стороны, если на том же интернет магазине не работает вывод баннеров — это не критично и можно поковырять самостоятельно.
Вообще, самостоятельная деятельность — это хорошо. Я больше предпочитаю так. Хотя, конечно не во всех областях. Например чтобы создать 3D-модель нужного качества мне потребуется, скажем, месяц, а спецу — день. Разница?:) Хотя, например, узнать как самостоятельно продвигать сайт ничего не стоит. Материалов в сети много и они в последнее время, приемлемого качества. Достаточного для того, чтобы сделать не так уж плохо. А до специалиста, при желании, докачаться можно за несколько месяцев. Не такая уж мудреная область.
Хватит разглагольствовать, пора закругляться. Планирую написать в ближайшее время пост про vCard и как его сделать на своем сайте на MODx — не пропустите. Кроме того, если у вас ошибка и вам нужен эксперт чтобы ее исправить — смело обращайтесь ко мне. Могу помочь советом или делом. Деньги возьму не всегда, зависит от количества работы:)
Для получения отладочных сообщений в журнале отчетов MODX следует использовать $modx->log(). Объявление функции имеет вид:
public function log($level, $msg, $target = '', $def = '', $file = '', $line = '')
Первый параметр
Первый параметр указывает уровень/тип сообщения — ошибка, предупреждение, информационное сообщение или отладочная информация. Для каждого уровня константы:
- MODX_LOG_LEVEL_FATAL = 0
- MODX_LOG_LEVEL_ERROR = 1
- MODX_LOG_LEVEL_WARN = 2
- MODX_LOG_LEVEL_INFO = 3
- MODX_LOG_LEVEL_DEBUG = 4
Второй параметр
Второй параметр содержит информацию, которая будет записана в журнал ошибок.
Обычно ограничиваются указанием только первых двух параметров
Третий параметр
В него передается «назначение», куда будет выводится информация. Возможные значения:
- FILE — сообщение сохраняется в файл core/cache/logs/error.log (по умочанию)
- ECHO — информация выводится на экран
- HTML — информация выводится на экран обёрнутая в тег <pre>
Четвертый параметр
В нём можно передать название скрипта или метода класса, в котором вызван метод log(). Особенно это удобно, когда таких вызовов несколько.
- «MySnippet» — выведется именно эта строка
- __METHOD__ — выведется название метода, где производится логирование
Пятый и шестой параметры
Они отвечают за вывод информации о скрипте и номере строки. Если их не указать, то они определятся автоматически как:
- __FILE__
- __LINE__
Системные настройки
Есть две системные настройки, влияющие на работу метода log() — это log_target и log_level. По умолчанию они имеют значение FILE и 1, соответственно.
Первая (log_target) указывает куда выводить информацию (см. «третий параметр»).
Вторая (log_level) указывает текущий уровень логирования MODX. Возможные значения:
- 0 — для фатальных сообщений (fatal)
- 1 — для ошибок (error)
- 2 — для предупреждений (warn)
- 3 — для информационных сообщений (info)
- 4 — для отладочных сообщений (debug)
Эта настройка ограничивает логирование сообщений указанным уровнем. Таким образом log() с уровнем выше, чем в настройке, будет отклонён. Например, если в настройке указано log_level = 1 (т.е. логируются только ошибки), то все вызовы метода log() с уровнем WARN, INFO и DEBUG в журнал записаны не будут. Как правило, при отладке на эти уровни не обращают внимание и используют текущий уровень логирования для ошибок.
Примеры
$modx->log(MODX_LOG_LEVEL_ERROR, 'Сообщение');
// или так
$modx->log(modX::LOG_LEVEL_ERROR, 'Сообщение');
// или ещё короче
$modx->log(1, 'Сообщение');
В режиме разработки полезно работать с уровнем DEBUG. Это полезно тем, что даже если вы забудете потом удалить этот вызов, то он не будет забивать журнал ошибок, так как на продакшн сайте уровень логирования всегда выставляется в 1 (записывать в журнал только ошибки).
Если нужно вывести только отладочную информацию на странице без контента, то указываем вывод в HTML и добавляем die() или exit(), например:
$modx->log(MODX_LOG_LEVEL_ERROR, print_r($modx->config, 1),'HTML'); die();
Copyright © Majestio, 2006-2023
Практически любой вопрос решается достаточно легко, если знать откуда растут ноги. В MODx для этого предусмотрен журнал ошибок. Но как читать эти ошибки? Вот в чем главный вопрос.
Конечно же плюсом будет знание английского, потому как не всегда есть возможность понять, что от нас хотят логичесим путем.
Notice: Undefined variable: first in /var/www/admin/data/www/site.ru/core/cache/includes/elements/modsnippet/18.include.cache.php on line 440
Как прочесть данную ошибку?
Разберем по пунктам:
- Переведем первую часть ошибки. В ней говорится о том, что вызвана неизвестная переменная под названием first.
- Папка modsnippet указывает, что данный ресурс является сниппетом.
- 18.include.cache.php — это сниппет с ID 18. Чтобы быстро перейти к редактированнию сниппета, подставьте ID к ссылке /manager/?a=element/snippet/update&id=18 и перейдите по ней.
- on line 440 — на линии 440. После того, как вы перешли в сниппет, перейдите сразу на 440 линию. Именно там и образовалось ошибка с переменной first.
Оригинал статьи: https://litosh-web.ru/blog/modx/kak-chitat-oshibki-v-modx
Подскажите пожалуйста как можно получать сообщения об ошибках в консоли(есть такой пакет, который позволяет выполнять php-скрипты). например есть код:
error_reporting(E_ALL | E_STRICT);
ini_set('display_errors', 1);
if(!$parent_resources = $modx->getCollection('modResource', array(
'parent' => 3,
'published' => 1
))){ return; };
$output = '';
foreach ($parent_resources as $parent_resource) {
$parent_resource_id = $parent_resource->get('id');
$output .= $parent_resource_id;
$child_resources = $modx->getCollection('modResource', array(
'parent' => $parent_resource_id,
'published' => 1
));
};
в нём ошибка потому что в результате на экран ничего не выводится. но мне хотелось бы получить хоть какие-то сообщения
Как видите, я в начале скрипта включил error_reporting и ini_set. Так же в .htaccess я прописал:
php_flag display_errors On
php_value error_reporting "E_ALL & ~E_NOTICE"
Но это не помогает
ps:
Пожалуйста не подсказывайте как исправить приведённый скрипт. Вопрос не в том как исправить, вопрос в том как в принципе получать сообщения об ошибках