Единственный практический способ сделать это, вероятно, зарегистрировать пользовательский обработчик исключений. Там мы проверяем, является ли исключение ошибкой базы данных, и соответственно отправляем электронное письмо.
Я пришел с этим простым кодом:
$wgHooks['SetupAfterCache'][] = 'onSetupAfterCache';
function onSetupAfterCache() {
set_exception_handler( 'customExceptionHandler' );
return true;
}
Сначала мы должны установить хук для регистрации нашего обработчика исключений. Если бы мы зарегистрировали это просто в LocalSettings.php
, оно было бы переопределено на wfInstallExceptionHandler()
.
function customExceptionHandler( $e ) {
if( $e instanceof DBError ) {
$from = new MailAddress( 'dberror@example.com' );
$to = new MailAddress( 'personal.mail@example.com' );
$body = 'A database error occured on My Wiki. Details follow:' . "\n\n" .
$e->getText();
UserMailer::send( $to, $from, 'Database error on My Wiki', $body );
}
Здесь мы проверяем, было ли исключение вызвано базой данных, и отправляем электронное письмо. Вам следует настроить переменные $from
, $to
и $body
. Для получения дополнительной информации о классах UserMailer
и MailAddress
см. Документацию.
wfExceptionHandler( $e );
}
В конце мы передаем исключение обработчику MediaWiki, который мы переопределили ранее. Он заботится о выводе ошибки пользователю и другим важным вещам.