Sviluppo software

Come gestire gli errori in PHP

Se il vosto servizio di hosting non vi consente di visualizzare il log degli errori del PHP un modo per risolvere il problema può essere includere all'inizio dei vostri script il codice seguente:


function gi_print_log($msg, $to_error_log = FALSE) {
    error_log("[" . date('Y-m-d H:i:s') . "] ${msg}n", 3, 'my_script.log');
    if ($to_error_log) {
        error_log($msg);
    }
}

function gi_get_err_type_string($type) {
    switch ($type) {
        case E_ERROR: return 'Fatal error';
        case E_WARNING: return 'Warning';
        case E_PARSE: return 'Parse';
        case E_NOTICE: return 'Notice';
        case E_CORE_ERROR: return 'Core Error';
        case E_CORE_WARNING: return 'Core Warning';
        case E_COMPILE_ERROR: return 'Compile Error';
        case E_COMPILE_WARNING: return 'Compile Warning';
        case E_USER_ERROR: return 'User Error';
        case E_USER_WARNING: return 'User Warning';
        case E_USER_NOTICE: return 'User Notice';
        case E_STRICT: return 'Strict';
        case E_RECOVERABLE_ERROR: return 'Recoverable Error';
        case E_DEPRECATED: return 'Deprecated';
    }
    return $type;
}

function gi_error_handler($err_no, $err_str, $err_file, $err_line, $errcontext) {
    gi_print_log(gi_get_err_type_string($err_no) . ' in ' . $err_file . ' on line ' . $err_line . ': ' . $err_str);
    gi_handle_fatal_error($err_no);
    return TRUE;
}

function gi_exception_handler($e) {
    gi_print_log(gi_get_err_type_string($e->getCode()) . ' in ' . $e->getFile() . ' on line ' . $e->getLine() . ': ' . $e->getMessage());
    gi_handle_fatal_error($e->getCode());
    return TRUE;
}

function gi_handle_fatal_error($type){
    switch ($type) {
        case E_ERROR:
        case E_CORE_ERROR:
        case E_COMPILE_ERROR:
        case E_USER_ERROR:
            die();
    }
}

function gi_shutdown_handler() {
    $error = error_get_last();
    if ($error !== NULL) {
        gi_print_log(gi_get_err_type_string($error['type']) . ' in ' . $error['file'] . ' on line ' . $error['line'] . ': ' . $error['message']);
    }
}

set_error_handler('gi_error_handler');
set_exception_handler('gi_exception_handler');
register_shutdown_function('gi_shutdown_handler');

Nel file my_script.log troverete tutti gli errori e le eccezioni catturate.

Autore: Lorenzo Chiodi
Senior software developer con più di 16 anni di esperienza nello sviluppo di soluzioni web based, enterprise, su misura. Dal 2011 socio fondatore di Garda Informatica Snc condivide questa avventura col fratello Giovanni.

Che soluzione cerchi?#

Read more!

Newsletter

Ti è piaciuto questo articolo? Iscriviti alla newsletter

Di tanto in tanto pubblichiamo nuovi articoli come questo. Se vuoi essere avvisato lascia il tuo indirizzo e-mail di seguito.

Non invieremo mai SPAM e non condivideremo la tua e-mail con altri. Per maggiori informazioni consulta la privacy policy.

Attendere prego...

closeIcona closesearchIcona searchmore vertIcona more vertmenuIcona menushareIcona sharearrow upwardIcona arrow upward