Réponse acceptée !
Salut,
En fait, on ne peut pas. Ca, c'est la réponse rapide.
En développant un peu, maintenant...
La durée de vie d'une connexion non persistante à MySQL est liée à la durée d'exécution du script PHP qui l'ouvre. Cela signifie que si un script PHP ouvre une connexion non persistante à MySQL et ne la ferme pas explicitement (avec mysql_close()), la connexion sera de toute façon fermée lors de la fin du script.
Un connexion persistante, quant à elle, n'est pas automatiquement fermée à la fin de l'exécution du script : elle reste ouverte (sauf bien sûr si l'on utilise mysql_close()). Elle peut alors être réutilisée par un autre script. Voici comment ça se passe alors :
- un premier script ouvre la connexion au serveur MySQL
- le premier script fait ce qu'il a à faire avec cette connexion
- le premier script se termine sans avoir fermé la connexion
- plus tard (ça peut être 1 ms après) un autre script demande à PHP de se connecter à MySQL
- si le serveur, le nom d'utilisateur et la base de données sont les mêmes, PHP réutilise la connexion qu'il avait gardée ouverte
- et ainsi de suite
Concrètement, on fait toujours l'ouverture avec mysql_connect(), c'est PHP qui décide s'il doit réellement se connecter ou bien utiliser une connexion existante.
Ca, c'est juste la base... Maintenant, il faut tenir compte du nombre de visiteurs et du temps d'exécution des scripts (qui sera difficilement mesurable, en tout cas jamais de manière fiable). Le serveur (la machine) est capable de faire plusieurs choses à la fois. Concrètement, plus d'un script PHP pourront être en cours d'exécution en même temps, utilisant alors (éventuellement) plusieurs connexions MySQL simultanément. Si trop de connexions sont maintenues ouvertes, le serveur MySQL refusera d'en créer de nouvelles.
Pour éviter ce genre de problème, il y a plusieurs choses possibles :
- utiliser des connexions non persistantes
- fermer les connexions explicitement avec mysql_close() aussitôt que la connexion n'est plus nécessaire.
- corollaire du point précédent : on peut essayer (quand c'est possible) de faire ses requêtes MySQL le plus tôt possible pour utiliser la connexion un temps le plus court possible
Si vraiment on ne s'en sort pas, qu'on a trop de trafic pour le nombre maximum de connexions MySQL autorisées :
- on change d'hébergeur (ou d'offre), parce que celui qu'on a n'est vraiment pas adapté
- on peut aussi accorder une attention toute particulière à l'optimisation de :
- ses scripts PHP
- l'architecture des tables et des index de la base de données
Neige