Devo chiudere le connessioni del database dopo l'uso in PHP?

3

Mi chiedo se dovrei chiudere qualsiasi connessione di database non necessaria all'interno dei miei script PHP.

Sono consapevole del fatto che le connessioni al database sono chiuse in modo implicito quando il blocco si interrompe e la chiusura "manuale" delle connessioni potrebbe gonfiare il codice con codice non necessario.

Ma non dovrei farlo per rendere il codice leggibile e il più facilmente comprensibile possibile, evitando anche diversi possibili problemi durante il runtime?

Inoltre, se lo facessi, sarebbe abbastanza per unset() il mio oggetto di database?

    
posta Sprottenwels 17.10.2013 - 12:51
fonte

2 risposte

6

Ai fini della codifica sicura, devi sempre chiudere esplicitamente le connessioni del database per assicurarti che il codice sia in grado di chiudersi con grazia e impedire a qualsiasi altro oggetto di riutilizzare la stessa connessione dopo averlo fatto.

L'uso di unset equivale a lasciare aperta la connessione al database, poiché si sta facendo affidamento sul garbage collector per ripulire la variabile, anziché chiedere alla connessione di chiudere con garbo la connessione dopo aver finito. Anche se come accennato da CodeCaster di seguito, farlo è accettabile dal momento che il garbage collector si assicura che le connessioni siano chiuse.

Un esempio utile, diciamo che stai pranzando in una caffetteria da qualche parte. Dopo aver mangiato, hai due possibilità, gettare gli avanzi nella spazzatura e poi riportare il piatto / vassoio al suo posto giusto (che è la pulizia dopo te stesso). E l'altro è lasciare il tuo casino sul tavolo e aspettare che qualcun altro (il garbage collector) lo pulisca per te.

Se lo pulisci da solo, sei sicuro che il tuo casino è stato ripulito. Ma se ti affidi al garbage collector, proprio prima che il garbage collector ripulisca il tuo casino, e se qualche strano stalker decidesse di usare i tuoi utensili usati per aiutarli nelle loro fantasie notturne su di te, poi riportali alla caffetteria appena in tempo per il garbage collector per ripulire il tuo casino. Cose del genere possono succedere.

EDIT: corretto il mio errore sui garbage collector.

    
risposta data 17.10.2013 - 13:08
fonte
0

Sì, aiuta naturalmente. Supponiamo che tu stia costruendo un'applicazione, in cui i clienti eseguono normali operazioni con le tue tabelle. Ora, se l'applicazione è pesante e l'elaborazione è intrinseca, è probabile che l'applicazione rallenti con un numero elevato di connessioni aperte, che rimarranno inattive per una durata molto lunga. Se si assicura esplicitamente che la connessione sia aperta per la durata in cui un client sta eseguendo qualche azione, è possibile migliorare la potenza di elaborazione. Inoltre, è meglio ripulire il casino più rapidamente che aspettare l'aiuto!

    
risposta data 18.10.2013 - 09:17
fonte

Leggi altre domande sui tag