500 ошибка как поступить дальше?

Знаю многие встречали (так как было много вопросов ко мне) такое что когда ставишь компонент например в зависимостях есть pdoTools, но нет правильной проверки получают 500 ошибку. Или взять второй вариант разрабатываешь свой плагин допустил ошибку или случайно удалил файл в IDE c какого-то компонента и здесь перестала работать админка, так как плагин имел например событие "OnHandleRequest".

Что делать дальше?
Да всё намного проще нежели думают другие

Ручное отключение
Заходим в базу через phpMyAdmin или Adminer ищем таблицу "modx_site_plugins", где "modx_" свой префикс таблицы, ищем поле "disabled" меняем 0 на 1, теперь плагин отключен.

Чтобы отключить все плагины можно взять вызвать sql запрос.
UPDATE `modx_site_plugins` SET `disabled` = '1' WHERE `modx_site_plugins`.`disabled` = 0
Дальше нужно почистить кеш.

Автоматическое отключение
Копируем код сохраняем например в файл «plugins_disable.php» в главный каталог сайта переходим по пути site.com/plugins_disable.php ждем завершения работы.
<?php
error_reporting("E_ALL");
ini_set("display_errors", true);
require_once('core/config/config.inc.php');
$cache = MODX_CORE_PATH . "cache";

$mysqli = new mysqli($database_server, $database_user, $database_password, $dbase);

/* проверка соединения */
if ($mysqli->connect_errn) {
    echo "Не удалось подключиться: {$mysqli->connect_error}\n";
    exit();
}
/* Отключение плагинов */
if (!$mysqli->query("UPDATE `{$table_prefix}site_plugins` SET `disabled` = '1' WHERE `{$table_prefix}site_plugins`.`disabled` ='0'")) {
   echo "Не удалось отключить плагини: ({$mysqli->errno}) {$mysqli->error}";
   exit();
}else{
    echo "Отключение плагинов успешно<br />";
}

$mysqli->close();
echo 'Удаление кеша';
function rrmdir($dir) { 
   if (is_dir($dir)) { 
      
     $objects = scandir($dir);
     foreach ($objects as $object) { 
       if ($object != "." && $object != ".." && $object != "log") { 
         if (is_dir($dir. DIRECTORY_SEPARATOR .$object) && !is_link($dir."/".$object))
           rrmdir($dir. DIRECTORY_SEPARATOR .$object);
         else
           unlink($dir. DIRECTORY_SEPARATOR .$object); 
       } 
     }
     rmdir($dir); 
   } 
 }

rrmdir($cache);
echo "Готово";
unlink(basename(__FILE__));
Заходим в админку, и «Ура всё работает». Дальше исправляем или устанавливаем нужные компоненты, включаем плагины.
Yurij Finiv
16 февраля 2020, 14:23
modx.pro
2
1 902
+11
Поблагодарить автора Отправить деньги

Комментарии: 7

Алексей Шумаев
16 февраля 2020, 16:54
+1
Наверное стоит чуть дополнить:
1. Скрипт лучше сохранить в закрытую базовой авторизацией директорию. На всякий случай )
2. Добавить необязательный параметр $_GET['id'] для отключения конкретного плагина, т.к. чаще всего виновник известен. А то потом не разобраться, какие были включены, а какие нет. Особенно если сайт чужой или старый с тяжёлым наследством…
    Yurij Finiv
    16 февраля 2020, 17:22
    0
    1. Хорошое замечание, но в моем случае скрипт удаляется после использования в целях безопасности.
    2. В случае всегда смотрю в логи и отключаю нужный вручную. Скрипт только сегодня набросал для пользователей так что могут быть всегда доработки.
      Алексей Шумаев
      16 февраля 2020, 17:25
      +1
      Да, я просмотрел.
      Но можно и не удалять — вдруг снова навернётся — опять придётся загружать.
      У меня часто есть на сайтах такая закрытая директория для всяких нужных обработок.
        Yurij Finiv
        16 февраля 2020, 17:28
        0
        Ну как показывает практика пользователи не следят за этим и на сайте может быть полно уязвимостей.
        Кто хочет допишет в своих целях.
          Алексей Шумаев
          16 февраля 2020, 17:32
          0
          Это да. Если сайт не на поддержке, то такая директория удаляется после запуска.
    Сергей Шлоков
    16 февраля 2020, 18:37
    +6
    Есть более простой вариант. Находим в папке core/cache/includes/elements/plugins файл с id плагина и комментируем содержимое или пишем второй строчкой return;. Частенько пользовался. Главное не удалять этот файл. Ибо тогда MODX создаст новый из неработающего плагина.
      Yurij Finiv
      16 февраля 2020, 18:48
      0
      В данном варианте главное не удалить кеш, как написал Сергей.
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      7