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 10 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.

Promemoria sui Cookie e sulla Privacy

Leggi l'informativa
closeIcona closesearchIcona searchmore vertIcona more vertmenuIcona menu