2010-05-05 13 views
5

sto scrivendo un servizio di errore di registrazione che sarà integrato in siti web in esecuzione sul mio server, che mi e-mail lotti di errore, eccLogging fatale/analizzare gli errori in PHP5

Così ho cercato di trovare se esiste un modo per gestire gli errori fatali e di analisi, tuttavia non utilizzare i trucchi per gestirli nel codice PHP (buffer di output, funzione di arresto). Sono abbastanza felice di scrivere un codice C o qualcosa per gestirlo al di fuori del mio codice PHP. Vorrei anche inviare un reindirizzamento se possibile (i miei siti usano il buffering dell'output quindi non dovrebbero esserci intestazioni inviate).

Sono abbastanza sicuro che questo potrebbe essere fatto con un modulo PHP, ma non ne ho mai scritto uno e non ho idea da dove cominciare.

risposta

3

Non c'è alcun modo di catturare un errore irreversibile o di analisi in PHP. Ma ..

In 5.2, hanno aggiunto error_get_last(). Puoi chiamarlo all'interno di una funzione di spegnimento ed eseguire la registrazione. Un testato 5.3 esempio per la cottura fuori una e-mail quando ci fu un errore fatale:

<?php 
register_shutdown_function(function(){ 
    $err = error_get_last(); 
    if(is_array($err) && array_key_exists('type', $err) $err['type'] > 0 
     && ($err['type'] == E_ERROR || $err['type'] == E_PARSE) { 
     error_log("Oh noes, a fatal: " . var_export($err, true), 1, '[email protected]'); 
    } 
}); 

(. Avrete bisogno di utilizzare un callback se non siete su 5.3 e non può fare funzioni anonime)

Sfortunatamente perché questo è gestito in una funzione di spegnimento, è probabile che le intestazioni siano già state emesse e potresti non essere in grado di fornire nulla di utile all'utente. Questo dipende dal resto dell'applicazione, quindi potrebbe funzionare per te. Provaci e scoprilo!

+0

Nella mia domanda ho chiarito che non sto cercando di rilevare gli errori usando quei trucchi di PHP, ho solo bisogno di registrarli e gestirli in qualche modo. Usare un modulo PHP sembra il modo più probabile, ma non riesco a trovare molte informazioni sulla gestione degli errori nei moduli PHP. – PeterBelm

+0

Nella mia risposta ho anche chiarito che non puoi acchiappare, ma puoi loggarti. :) – Charles

+0

ha funzionato per me - anche la sintassi del codice è errata –

1

Per impostazione predefinita, tutti gli errori vengono passati al log degli errori del server Web, ma è possibile modificarli in php.ini specificando il percorso del proprio file via error_log setting. Quindi, ciò che resta da fare è scrivere un app/script separato per analizzare/inviare dati/troncare il file di registro ogni giorno/qualsiasi e farlo funzionare come cron job.

+0

L'unico problema con questo è che non sarei in grado di emettere un reindirizzamento. Penso che con un modulo PHP sarei in grado di raggiungere questo obiettivo. – PeterBelm