class

Mammouth du PHP | 19672 Messages

05 mai 2008, 16:12

Ok, alors je vais vous montrer ce que nous dit la doc PHP, je n'ai rien inventé :
L'utilisation de mysql_close() n'est pas habituellement nécessaire, puisque les connexions non persistantes ouverts sont automatiquement fermées à la fin l'exécution du script.
Ainsi que :
Freeing resources

Thanks to the reference-counting system introduced with PHP 4's Zend Engine, a resource with no more references to it is detected automatically, and it is freed by the garbage collector. For this reason, it is rarely necessary to free the memory manually.

Note: Persistent database links are an exception to this rule. They are not destroyed by the garbage collector. See the persistent connections section for more information.
En clair, à moins d'utiliser une connexion persistante, on peut laisser faire le "garbage collector" qui va se charger automatiquement de clore une connexion qui n'est plus utilisée en arrivant à la fin du script. Et l'utilisation d'une connexion persistante n'est pas toujours justifiée, il faut être prudent avec ça, on peut avoir des surprises désagréables. Voir la doc sur le sujet
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

ViPHP
ViPHP | 2291 Messages

05 mai 2008, 16:14

Je pense aussi qu'il est préférable de fermer la connexion mysql lorsqu'on n'en a plus besoin. Sur un petit site, cela ne changera pas grand chose mais sur un site à fort audience cela permettrra de soulager quelque peu le serveur de base de données et de ne pas atteindre trop souvent le nombre maximum de requêtes simultanées.

:-k En partant du principe que la connexion se referme seule, n'envoie ton pas inutilement des requêtes en lui demandant de fermer la connexion :?:

ViPHP
ViPHP | 4674 Messages

06 mai 2008, 00:28

Hey :),

Comme je suis de retour, je me permets de mettre mon grain de sel.
On parle de fermer les connexions de PDO, mais les ressources de PDO sont stockées dans des attributs. À la fin de l'exécution d'un script, la méthode magique de destruction de l'objet (__destruct) va être appelée avant que le système détruise l'objet. Je ne me souviens plus des sources de PDO, mais si la connexion n'est pas fermée et détruite par la méthode __destruct, elle sera forcément détruite lorsque l'objet sera détruit naturellement par le système (la mémoire des attributs sera libérée, puis on passera à la libération des méthodes).

Je pense que par la suite, PHP est suffisamment bien conçu (et qu'on peut par conséquent lui faire confiance) pour que quand une ressource est supprimée, elle soit clos dans les deux sens (PHP vers BD par exemple et BD vers PHP).

Le ramasse-miette — pour reprendre la traduction de nos amis Java — n'intervient que si un objet n'a pas été supprimé alors qu'il aurait du ou qu'il le pourrait. Et je ne sais même pas si cette notion existe en PHP car le temps de vie d'un script est extrêmement faible (sauf cas de permanence exceptionnelle).

En conclusion, on doit retenir qu'il est préférable de fermer nous même nos ressources car on sait exactement ce que l'on fait et ça nous assure un meilleur fonctionnement, même si PHP s'est prendre tout ça en charge car c'est un peu son but (faciliter les tâches).
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).

Mammouth du PHP | 514 Messages

06 mai 2008, 09:04

Tenez, tant qu'on y est, vous pensez quoi des connexions persistantes ?