fermer connexions

Invité
Invité n'ayant pas de compte PHPfrance

04 nov. 2005, 23:16

Bonjour,
j'ai un site qui contient une cinquantaine de pages, dans lequelles j'effectue de nombreuses connexions à une base mysql pour extraire et afficher des infos. Grosso modo, chaque page contient une requête, et ça peut aller jusqu'à 5 par page.
A aucun moment je n'utilise mysql_close pour fermer les connexions ouvertes sur les diverses pages...
Est ce que ça pose un pb?

ViPHP
ViPHP | 1380 Messages

05 nov. 2005, 08:39

Ca dépend comment tu ouvres ta connexion. Avec mysql_connect, la connexion se fermera automatiquement à la fin du script mais il est préférable de la fermer dès que la dernière requête de ton script est faite (mysql_close). Ca libère de la mémoire. De la même manière, c'est une bonne discipline de libérer les ressources mémoires du résultat avec un mysql_free_result (surtout si il y a beaucoup de résultats)

Pour voir les effet de ces fermertures sur la mémoire, tu peux insérer les lignes suivantes:
db_link   = mysql_connect(...)
$resultat = mysql_query(....)

// code d'extraction des résultats

echo 'Avant free_result: '.memory_get_usage().'<br />';
  mysql_free_result($resultat);
echo 'Après: '.memory_get_usage().'<br />';


echo 'Avant close: '.memory_get_usage().'<br />';
  mysql_close($db_link);
echo 'Après: '.memory_get_usage().'<br />';
Si tu établis tes connexions avec mysql_pconnect (connexion persistante), il n'est pas possible de fermer les fermer. Ni mysql_close, ni la fin du script ne les fermeront. Elle peuvent sensiblement accélérer les connexions au serveur MySQL lorsque celle-ci sont particulièrement lentes mais attention à bien gérer le nombre de connexions!

Prudence donc.
ripat

Invité
Invité n'ayant pas de compte PHPfrance

05 nov. 2005, 14:36

si j'ai bien compris, le risque est de saturer la mémoire et bloquer le site s'il y a beaucoup de requêtes effectuées?

ViPHP
ViPHP | 1380 Messages

05 nov. 2005, 19:06

si j'ai bien compris, le risque est de saturer la mémoire et bloquer le site s'il y a beaucoup de requêtes effectuées?
Saturer la mémoire, n'exagérons pas. Il n'y va que de quelques KB tout au plus, mais les petits ruisseaux...

Quant aux nombres de connexions, pour les non-persistantes, tu gagnes un petit peu de temps si tu les fermes avant la fin du script. Pour le reste, tout dépend du maximum de connexion permises (mysql.max_links pour php.ini ou max_connections pour le serveur MySQL si tu as la main sur les fichiers de config).

De toutes les façons, c'est plus propre de les fermer dès que tu n'en as plus besoin. Imagine qu'un script reste bloqué pour une raison ou une autre...

Tu ouvres la connexion le plus tard possible dans le script, tu regroupes toutes les requêtes, tu en extrais éventuellement les données et tu refermes le tout. Recordset et connexion.
ripat