2011-04-11 28 views
2

我正在尋找一個掛鉤或某種方式來輕鬆發送電子郵件,每當我在mediawiki上發生數據庫錯誤時。我意識到我可能不得不將這個功能添加到他們的數據庫類中,但目前我不確定是否應該這樣做。如何讓mediawiki在每個數據庫錯誤上給我發電子郵件?

我不想要一個解決方案,其中包括守護進程,crons或其他任何會根據SQL查詢日誌讀取和發送電子郵件的解決方案。

+0

爲什麼你不應該那樣做?這意味着如果更新MediaWiki,則必須再次更改該類,所以請注意這一點。 – 2011-04-11 21:57:07

回答

1

這樣做的唯一可行的方法可能是註冊自定義異常處理程序。在那裏我們檢查異常是否是數據庫錯誤並相應地發送電子郵件。

我想出這個簡單的代碼:

$wgHooks['SetupAfterCache'][] = 'onSetupAfterCache'; 
function onSetupAfterCache() { 
    set_exception_handler('customExceptionHandler'); 

    return true; 
} 

首先,我們必須建立一個鉤子來註冊我們的異常處理程序。如果我們在LocalSettings.php中註冊它,它將被覆蓋wfInstallExceptionHandler()

function customExceptionHandler($e) { 
    if($e instanceof DBError) { 
     $from = new MailAddress('[email protected]'); 
     $to = new MailAddress('[email protected]'); 
     $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變量。有關UserMailerMailAddress類的更多信息,請參閱文檔。

wfExceptionHandler($e); 
} 

最後,我們將例外傳遞給MediaWiki的處理程序,我們之前已經重寫了該處理程序。它負責將錯誤輸出給用戶和其他重要的東西。

+0

做這個方法也會捕獲警告和致命錯誤以及db錯誤,對嗎? (不是我介意的) – 2011-04-21 19:44:29

+0

這隻會捕獲異常,只發生在致命錯誤上,如語法或連接錯誤。 – 2011-04-21 19:55:55

相關問題