Aller au contenu

Fermer ses connexions PDO


Sujets conseillés

Posté

Bonjour à tous,

J'ai la chance et la joie d'atteindre très souvent (et surtout avec peu de connectés) des max_user_connections sur OVH pro, avec une base de 200mo et quelques.

Il me faut donc vérifier tous mes scripts, voir si mes connexions à PDO sont bien fermées.

Je le dis tout de suite : je ferme en fin de fichier. Je sais, c'est mal, mais je peux pas faire mieux pour l'instant.

Voilà mon problème :

Pour accéder à la connexion PDO, à partir d'une classe, j'utilise ce petit tour de passe-passe :

class membre
{

private $cnx;

function __construct()
{
// On donne la connexion PDO à la classe
global $cnx;
$this->cnx = $cnx;
}

...
}

C'est l'unique solution convenable que j'ai trouvée sur le web pour faire ça. Cependant, je me pose maintenant la question suivante : $this->cnx est un pointeur vers ma connexion, n'est-ce pas ? Et donc, quand je fais un $cnx = null; à la fin de mes scripts, le pointeur $this->cnx existe toujours, non ? Alors, je ne sais pas bien si l'objet membre sera détruit à la fin de l'exécution de mon script, et donc si tous les pointeurs vers la connexion seront bien fermés... ou pas ! Qu'est-il conseillé de faire à ce moment là ? Un destructeur dans mes classes où je ferme systématiquement la connexion ($this->cnx = null;) et supprimer tous mes objets créés en fin de script ?

Bref, je suis perdu dans ma théorie informatique. :(

Merci d'avance pour l'éclairage.

Posté

Bonjour,

quand tu fais ton $this->cnx = $cnx;, tu crées une référence vers l'objet en question, et $this->cnx = null; ne fait que détruire cette référence. Or, tant qu'il restera au moins une référence vers l'objet, il ne sera pas détruit. Donc dans ton cas, tant que la variable globale existe ou bien qu'il reste des instances d'objets ayant eux-même créé une référence, la connexion n'est pas fermée.

Ajouter un destructeur pour effacer le $this->cnx ne changera donc rien du tout, d'autant plus que PHP se charge déjà d'effacer toutes les propriétés de ton objet.

Je ne suis pas sûr d'avoir compris ce que tu cherches à faire : si tu veux t'assurer que la connexion soit bien fermée en fin de script, c'est déjà le cas, toutes les références étant forcément détruites le destructeur PDO est bien appelé.

Maintenant si tu veux gérer ça de manière plus efficace en n'utilisant la connexion PDO que si nécessaire et en la détruisant dès que possible, ça va être plus compliqué oui et dépend essentiellement du cheminement de tes scripts. Par exemple pour ma part je m'assure de couper la connexion PDO avant de débuter le moindre affichage.

Posté

Merci pour ta réponse !

Si effectivement, les références sont détruites en fin de script PHP, c'est différent. Ce que je cherche à faire : éviter que mes membres se choppent une fatal error écran blanc avec 'max_user_connections' écrit en grand. Donc je cherchais à voir s'il y avait des connexions qui restaient ouvertes en trop...

D'après le forum OVH, certains serveurs bdb ne tiennent pas vraiment le coup, donc il est possible que ce ne soit pas totalement ma faute, mais si j'optimise au mieux mes scripts, ça ne peut pas faire trop de mal.

Utilisant smarty, mes connexions sont fermées avant l'affichage du template.

Posté
Utilisant smarty, mes connexions sont fermées avant l'affichage du template.

mmm tu supprimes bien toutes les références pour cela ? Y compris ta variable globale ?

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...