ЧТМ:Отладка: различия между версиями

Материал из ЧТМ
Перейти к навигации Перейти к поиску
Нет описания правки
Нет описания правки
 
Строка 36: Строка 36:
== Проверки ==
== Проверки ==


=== Перехватчик фаталов ===
=== Дебаггеры ===
<syntaxhighlight lang="php">
<syntaxhighlight lang="php">
// ==========================================
// ==========================================
Строка 57: Строка 57:
         die();
         die();
     }
     }
});
</syntaxhighlight>
Если и предыдущий не поможет, то вот ещё (если Mediawiki упадёт дважды, то он запрашивает напрямую у php):
<syntaxhighlight lang="php">
// ==========================================
// УЛЬТИМАТИВНЫЙ ДЕБАГГЕР (УДАЛИТЬ ПОСЛЕ ОТЛАДКИ)
// ==========================================
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
set_exception_handler(function(Throwable $e) {
    echo "<pre style='background:#fee7e6; color:#b12222; padding:20px; border:2px solid #d33; font-size:14px; font-family:monospace; position:fixed; top:0; left:0; width:100%; height:100%; z-index:99999; overflow:auto;'>";
    echo "<b>🔥 ПЕРЕХВАЧЕНО ИСКЛЮЧЕНИЕ:</b>\n\n";
    echo "Класс: " . get_class($e) . "\n";
    echo "Файл: " . $e->getFile() . " (строка " . $e->getLine() . ")\n";
    echo "Сообщение: " . $e->getMessage() . "\n\n";
    echo "<b>Стек вызовов (Backtrace):</b>\n" . $e->getTraceAsString();
    echo "</pre>";
    die();
});
set_error_handler(function($errno, $errstr, $errfile, $errline) {
    if (!(error_reporting() & $errno)) {
        return false;
    }
    if (in_array($errno, [E_USER_ERROR, E_RECOVERABLE_ERROR])) {
        throw new ErrorException($errstr, 0, $errno, $errfile, $errline);
    }
    return false;
});
});
</syntaxhighlight>
</syntaxhighlight>

Текущая версия от 23:37, 25 мая 2026

Терминал

[править код]

Обновление БД через браузер: https://thirdworldcup.ru/mw-config/

Обновление БД через терминал
  • сначала cd ~/thirdworldcup.ru/public_html
  • потом php8.5 maintenance/run.php update
Скрипт обновления статистики участников
  • php8.5 maintenance/run.php initSiteStats --update --active
Очистка БД от текста безвозвратно удалённых страниц
  • php8.5 maintenance/run.php purgeOldText --purge
Сброс системного кэша локализации

php8.5 maintenance/run.php rebuildLocalisationCache --force

Подстраницы

[править код]

Служебные

[править код]

Разработка расширений

[править код]

Проверки

[править код]

Дебаггеры

[править код]
// ==========================================
// СУПЕР-АГРЕССИВНЫЙ ПЕРЕХВАТЧИК ФАТАЛОВ (УДАЛИТЬ ПОСЛЕ ОТЛАДКИ)
// ==========================================
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

register_shutdown_function(function() {
    $error = error_get_last();
    if ($error !== null && in_array($error['type'], [E_ERROR, E_PARSE, E_CORE_ERROR, E_COMPILE_ERROR])) {
        echo "<pre style='background:#fee7e6; color:#b12222; padding:20px; border:2px solid #d33; font-size:14px; font-family:monospace; position:fixed; top:0; left:0; width:100%; height:100%; z-index:99999; overflow:auto;'>";
        echo "<b>🔥 ОБНАРУЖЕНА КРИТИЧЕСКАЯ ОШИБКА ПРИ СТАРТЕ:</b>\n\n";
        echo "<b>Файл:</b> " . htmlspecialchars($error['file']) . " (строка " . $error['line'] . ")\n";
        echo "<b>Сообщение:</b> " . htmlspecialchars($error['message']) . "\n";
        echo "\n<b>Стек вызовов (если доступен):</b>\n";
        debug_print_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS);
        echo "</pre>";
        die();
    }
});

Если и предыдущий не поможет, то вот ещё (если Mediawiki упадёт дважды, то он запрашивает напрямую у php):

// ==========================================
// УЛЬТИМАТИВНЫЙ ДЕБАГГЕР (УДАЛИТЬ ПОСЛЕ ОТЛАДКИ)
// ==========================================
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

set_exception_handler(function(Throwable $e) {
    echo "<pre style='background:#fee7e6; color:#b12222; padding:20px; border:2px solid #d33; font-size:14px; font-family:monospace; position:fixed; top:0; left:0; width:100%; height:100%; z-index:99999; overflow:auto;'>";
    echo "<b>🔥 ПЕРЕХВАЧЕНО ИСКЛЮЧЕНИЕ:</b>\n\n";
    echo "Класс: " . get_class($e) . "\n";
    echo "Файл: " . $e->getFile() . " (строка " . $e->getLine() . ")\n";
    echo "Сообщение: " . $e->getMessage() . "\n\n";
    echo "<b>Стек вызовов (Backtrace):</b>\n" . $e->getTraceAsString();
    echo "</pre>";
    die();
});

set_error_handler(function($errno, $errstr, $errfile, $errline) {
    if (!(error_reporting() & $errno)) {
        return false;
    }
    if (in_array($errno, [E_USER_ERROR, E_RECOVERABLE_ERROR])) {
        throw new ErrorException($errstr, 0, $errno, $errfile, $errline);
    }
    return false;
});

Синтаксис через терминал

[править код]

Сначала:

cd ~/thirdworldcup.ru/public_html

или

cd ~/test.thirdworldcup.ru/public_html

Потом:

php8.5 -l путь к файлу

Например:

php8.5 -l extensions/PersonalWhitelist/includes/ApiQueryPwGroups.php