Modx отображение ошибок

  • Имя: Отладка
  • Тип: 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

  • modmore
  • Jens Wittmann – Gestaltung & Entwicklung
  • Fabian Christen
  • Digital Penguin
  • STERC
  • Dannevang Digital
  • deJaya
  • eydolan
  • Following Sea
  • Raffy
  • Sepia River Studios
  • Anton Tarasov
  • Chris Fickling
  • CrewMark
  • Murray Wood
  • Nick Clark
  • Lefthandmedia
  • Helen
  • YJ
  • krisznet
  • Richard

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

Как прочесть данную ошибку?

Разберем по пунктам:

  1. Переведем первую часть ошибки. В ней говорится о том, что вызвана неизвестная переменная под названием first.
  2. Папка modsnippet указывает, что данный ресурс является сниппетом.
  3. 18.include.cache.php — это сниппет с ID 18. Чтобы быстро перейти к редактированнию сниппета, подставьте ID к ссылке /manager/?a=element/snippet/update&id=18 и перейдите по ней.
  4. 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:
Пожалуйста не подсказывайте как исправить приведённый скрипт. Вопрос не в том как исправить, вопрос в том как в принципе получать сообщения об ошибках

Понравилась статья? Поделить с друзьями:
  • Modx вывод ошибок php
  • Mme ошибка внутреннего устройства adobe audition
  • Mmd ошибка не удалось запустить приложение
  • Mmcm ошибка 80010017 на ps3 как исправить
  • Mmccore ahk ошибка калина