2011-12-15 19 views
8

Ho un semplice gestore di errori personalizzati che scrive in un file di log degli errori alcune informazioni utili per il debug.set_error_handler() non funziona per errore FATAL

funziona per tutto ma non viene attivato per errore FATAL.

Un modo per risolvere questo?

Attualmente per bypassare questa circostanza ho registrato una funzione di spegnimento troppo che controlla error_get_last()

+4

['I seguenti tipi di errore non possono essere gestiti con una funzione definita dall'utente: E_ERROR, E_PARSE, E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR, E_COMPILE_WARNING e la maggior parte di E_STRICT generati nel file in cui viene chiamato set_error_handler().] (Http: //us.php.net/set_error_handler) – animuson

+1

Questa domanda manca di un collegamento a: [PHP: Custom error handler - gestione degli errori parse e fatali] (http://stackoverflow.com/q/1900208/367456). – hakre

risposta

16

No, questo è solo una limitazione della set_error_handler(); non gestisce tutti gli errori.

i seguenti tipi di errore non possono essere gestiti con una funzione definita dall'utente: E_ERROR, E_PARSE, E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR, E_COMPILE_WARNING, e la maggior parte di E_STRICT sollevato nel file in cui set_error_handler() è chiamato.

Il register_shutdown_function() e error_get_last() è una soluzione decente.

+0

Non siamo in grado di ottenere il backtrace in questo modo ... – Loenix

+0

Puoi dare un esempio dell'uso di register_shutdown_function() e error_get_last() come soluzione temporanea non posso pensarne uno. –

4

Esistono solo modi per risolverlo, ad es. utilizzando register_shutdown_function() e quindi controllando se si è verificato un errore all'interno di quella funzione.

PHP ha log_errors per un motivo, è possibile effettuare il log di PHP qualsiasi errore in syslog o un file di registro senza una singola riga di codice personalizzato. Quindi usare set_error_handler() per questo scopo non è affatto necessario e dovrebbe essere evitato a meno che non sia necessario ad es. uno stacktrace.

+0

ovviamente ho bisogno di stacktrace e/o altre informazioni di debug come descritto nel mio primo post – dynamic

+0

Esempio di soluzione di hacking per favore –

Problemi correlati