2010-03-01 15 views
6

È considerata una cattiva pratica lasciare che die() vivi in ​​un ambiente di produzione? Mi è capitato di leggere questo articolo http://www.phpfreaks.com/blog/or-die-must-die in cui l'autore scopre persone che usano una cosa del genere in un ambiente di produzione. Quindi non dovrei codice in questo modo:PHP: muore() deve morire?

$connection = mysql_connect($db_host, $db_username, $db_password); 
if (!$connection){ 
    die ("Could not connect to the database."); 
} 

Come si codice?

+2

È una cattiva pratica mostrare agli utenti finali gli errori del database: questi dovrebbero essere registrati come e un errore generico mostrato all'utente. –

+2

A proposito, il miglior titolo-argomento di sempre! –

+1

Vedere http://stackoverflow.com/questions/2130105/should-you-always-end-mysql-queries-with-or-die/2130127#2130127 – LiraNuna

risposta

3

Non si die ogni volta che si commette un errore, vero? Perché dovrebbe fare la tua applicazione?

il modo corretto è quello di intercettare gli errori ed elaborarli in modo dipendente dal contesto, ad esempio

try { 
    application goes here 

    $conn = mysql_connect(...) 
    if(!$conn) 
     throw .... 
    .... 
} catch(Exception $err) { 
    if(PRODUCTION) { 
     log error 
     say something nice 
    } 
    if(DEBUG) { 
     var_dump($err); 
    } 
} 
+1

Una domanda soggettiva. Perché preferisci rilanciare e catturare un'eccezione invece di occuparti della condizione 'if (! $ Conn)'? –

+1

Enrico, perché le eccezioni sono più adatte per uscire dal flusso standard del programma e passare il controllo al codice di gestione degli errori. È anche un modo più robusto per "arrestarsi precocemente": se invece si fa affidamento sulle condizioni if ​​/ else ovunque, è necessario ricordare ogni volta di chiamare le funzioni corrette per terminare l'esecuzione. –

3

die() è una dichiarazione molto approssimativa ... Utile (abbastanza) nella fase di sviluppo, l'ho trovata errata nella fase di produzione.

È necessario analizzare, monitorare e registrare errori irreversibili e visualizzare messaggi adeguati come "Impossibile connettersi al server, provare in pochi minuti o scrivere a [email protected] per notificare il problema"!

1

Bene in un enivornment produttivo, non si dovrebbe mai esporre eventuali errori/informazioni sul sistema verso l'esterno mondo.

Importante è, per registrare tutti gli errori. Se si sta parlando di un sito Web, vorrei inviare un HTTP status 500 come risposta.

Problemi correlati