Gestione avanzata degli errori in PHP

[Voti: 14    Media Voto: 4.5/5]

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.

Garda Informatica

Garda Informatica

Garda Informatica sviluppa software su misura nella forma di Web Application, App Ibride per iOS/Android/Windows Phone, Crawler Web, Gestionali Web o semplici Connettori per l'integrazione tra software di terze parti.
Garda Informatica