PHP: Как регистрировать фатальные ошибки? - PullRequest
7 голосов
/ 17 февраля 2012

Как я могу записать эту ошибку в текстовый файл или базу данных?

Fatal error: Call to undefined method PROJECTS::ssss()

Ответы [ 5 ]

9 голосов
/ 27 июля 2014

Существует способ справиться с вашей задачей, и на самом деле вы МОЖЕТЕ установить собственный обработчик ошибок на ФАТАЛЬНЫЕ ошибки.

Вы можете сделать это следующим образом:

ini_set('error_reporting', E_ERROR);
register_shutdown_function("fatal_handler");
function fatal_handler() {
    $error = error_get_last();
    //Do whatever you want with this error, for example:
    YourDBApplicationLayer::writeFatal($error);
}
9 голосов
/ 17 февраля 2012

невозможно обрабатывать фатальные ошибки с помощью пользовательского обработчика ошибок.

Лучшее решение - просто включить регистрацию ошибок (например, в syslog) в вашем php.ini, а затем использовать такой инструмент, как logcheck / logsentry, чтобы получать регулярные электронные письма о необычных записях системного журнала.
Вместо системного журнала PHP также может регистрировать ошибки в файле - просто взгляните на параметры регистрации ошибок в php.ini.

log_errors = On
error_log = syslog
error_log = /path/to/some/folder/phperrors.log

Очевидно, вы хотите использовать только одну из error_log строк.

4 голосов
/ 06 февраля 2018

Теперь в PHP 7 возможно перехватывать фатальные ошибки:

try {

    ggggg(); // <---- make a fatal error

} catch(\Throwable $e) {

    var_dump($e);

}


старый пост был catch(Error $e) изменен на catch(\Throwable $e) хотя оба работают

1 голос
/ 17 февраля 2012

Вы можете иметь все свои базовые классы принадлежащие суперклассу, использующему перегрузку метода :

class Base 
{
    public function __call($name)
    {
        MyLog::logError(...);
        trigger_error("Function ".get_class($this)."::$name doesn't exist", 
            E_USER_ERROR);
    }
}

Попытки вызвать несуществующие методы классов, производных от Base, в конечном итоге будут обработаны Base::__call(). Соответственно, для статических методов есть __callStatic() (по состоянию на PHP 5.3).

0 голосов
/ 17 февраля 2012

Что-то вроде:

if(!method_exists($obj, 'method')){

   $db->log('What you want to log'); //log in your DB
   error_log('message');//Write to php's error log

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...