2012-10-06 13 views
5

Durante lo sviluppo di un sistema Web php, impostare E_ALL | E_STRICT in error_reporting e aver cura di tutti i tipi di errori inclusi gli errori di avviso è una buona pratica.Quali tipi di errori dovrebbero interrompere il sistema, nel sistema web PHP rilasciato?

Ma nel sistema rilasciato, dovrei interrompere il sistema quando si è verificato un errore?

O devo arrestare il sistema solo quando si è verificato E_ERROR e ignorare tutti gli altri errori, come E_WARNING, E_NOTICE o E_STRICT?

Quali tipi di errori dovrei gestire nel mio gestore di errori personalizzato e interrompere (uscire) il sistema?

+2

Gli avvisi devono arrestare definitivamente il sistema (ma non lasciare i gestori di errori/eccezioni originali, scrivere i propri che non rivelano alcuna informazione di errore). Minori livelli di errore sono meno definitivi, ma dovresti almeno registrarli e spedire i rapporti a te stesso - ciò ti motiverà a correggerli :) – DCoder

+0

@DCoder grazie per i buoni consigli! Potresti dirmi perché dovresti interrompere il sistema quando E_WARNING si è verificato? –

+1

Nella maggior parte dei casi in cui la correttezza è più importante della disponibilità elevata, è preferibile "fallire velocemente" a "andare avanti indipendentemente da cosa". Un avvertimento di solito significa che qualcosa è andato veramente male e andare avanti peggiorerebbe le cose. Considera la domanda più comune su questo sito - ["mysql_fetch_ attende parametro ..., booleano dato"] (http://stackoverflow.com/search?q=mysql+fetch+boolean+given). Se non si interrompe lo script al primo avviso, si otterrà un lungo elenco di avvertenze ricorrenti e, eventualmente, si potranno anche confondere altri dati utilizzando i risultati della query non riuscita in un'ulteriore elaborazione. – DCoder

risposta

4

Quando si sviluppa un codice, è necessario prestare attenzione a qualsiasi avvertimento, inclusi gli avvisi.

Per la produzione, non dovresti arrestare gli errori. Invece è possibile utilizzare set_error_handler() per gestire eventuali errori come E_USER_ERROR, E_USER_WARNING, E_USER_NOTICE. Reindirizza il client alla pagina personalizzata, visualizza un messaggio personalizzato per qualsiasi tipo di errore. Il punto non è quello di lasciare le informazioni di errore di default.

Si dovrebbe sempre disporre di un sistema che segnali eventuali errori rilevati (via e-mail o simili) sui server di produzione e occuparsi di questi il ​​prima possibile.

Su php.net/set_error_handler hai un sacco di esempi che ti renderanno la vita molto più facile e ti aiuteranno a tenere traccia di errori e avvisi.

+0

grazie per le informazioni utili! In tutti gli esempi di gestori di errori in [php.net/set_error_handler](http://php.net/set_error_handler) non chiamare 'exit' quando E_WARNING (non E_USER_WARNING) si è verificato. Pensi che non sia necessario mostrare la schermata o il messaggio di errore agli utenti e interrompere (uscire) il sistema quando E_WARNING si è verificato? –

+0

Questa è una tua decisione, Warning non ha bisogno di 'exit', sono solo avvertimenti (indici indefiniti, funzioni deprecate, ecc.) –

+0

grazie per la tua risposta! –

Problemi correlati