7
votes

Comment fermer les connexions MySQL non spécifiques?

Mes clients Hostting Fournisseur bloque le site en raison de connexions MySQL trop déconnectées. Le site a été créé précédemment par quelqu'un et je le maintient actuellement.

J'ai ajouté la fonction mysql_close à la fin des pages. Il ferme les connexions bien mais je reçois toujours des raccords laissés non par les côtés. Je suis peut-être laissé un peu où ..

Ce dont j'ai besoin est de fermer les connexions MySQL non spécifiques sur le serveur à l'aide d'un fichier cron ou d'une chose ..

Qu'est-ce que je dois faire?

est-il possible de fermer toutes les connexions à la fois? Si oui, comment?


2 commentaires

Vous pouvez essayer d'utiliser mysql_pconnect , qui a si décrit comme décrit dans Stackoverflow.com/questions/1340859/...


Comment fermer la connexion ouverte dans mysql_pconnect Laissez-le essayer ..


3 Réponses :


0
votes

Si vous obtenez des connexions non récoltées, des chances que vous manquez certaines pages, peut-être via Inclut etc., ou des fonctions appelant "sortie" afin que vous n'atteigne pas votre code de fermeture.

Je ne crois pas que vous puissiez démarrer d'autres connexions de MySQL à l'aide de cron.


0 commentaires

6
votes

Utilisez-vous des connexions persistantes? Sinon, vous ne devriez vraiment pas vous inquiéter trop de la fermeture de vos connexions. De manuel

en utilisant mysql_close () n'est généralement pas nécessaire, comme ouvert non persistant Les liens sont automatiquement fermés au fin de l'exécution du script. Voir aussi libérer des ressources.

Au lieu de TOO_MUCH Connexions non récoltées, n'est-ce pas (ce qui est essentiellement la même chose) que vous avez trop de connexions ouvertes? Par exemple, trop d'utilisateurs sur votre site à la fois?

Si vous avez des connexions persistantes, n'oubliez pas ceci:

mysql_close () ne fermera pas Liens persistants créés par mysql_pconnect ().

Comme indiqué dans le commentaire, il est fort peu probable qu'un mysql_connect () n'est pas libéré à la fin du script. D'un autre page manuelle

Ressources de libération

Merci au comptage de référence Système introduit avec ZEND de PHP 4 Moteur, une ressource sans plus Les références à elle sont détectées automatiquement, et il est libéré par le Éboueur. Pour cette raison, il est rarement nécessaire pour libérer la mémoire manuellement.

Remarque: Les liens de base de données persistants sont un exception à cette règle. Ils ne sont pas détruit par le collecteur des ordures. Voir la section Connections persistantes Pour plus d'informations.

Il pourrait y avoir un Sidenote Cependant, des commentaires sur le mysql_close page

au moins avec PHP5.3.2 et Windows Connexion par TCP, vous devriez toujours Utilisez cette fonction mysql_close () à fermer et libérer la prise TCP étant utilisé par php. Collection des ordures après L'exécution de script ne ferme pas le prise TCP seul. La prise resterait autrement rester dans "attendre" l'état pendant environ 30 secondes et tout Charges de page supplémentaires / Connexion les tentatives n'ajouteraient qu'au total Nombre de connexions TCP ouvertes. Cette Le temps d'attente ne semble pas être Configurable via les paramètres PHP.


4 commentaires

Les connexions semblent être ouvertes avec mysql_connect () uniquement .. Comment fermer l'ouverture même dans mysql_pconnect, laissez-la ..


Mais pour être sûr: vous ne devez pas nécessiter de fermer chaque connexion à la fin de vos fichiers: il sera fermé automatiquement là-bas. Vous n'avez besoin que de le fermer si vous voulez faire cela à mi-chemin, pour libérer des ressources. Ne pas perdre et effort ajouter mysql_close à tous vos scripts: d. Si vous n'utilisez pas pconnect , vous n'avez pas besoin de vous soucier de la fermeture de ceux-ci


Non, ce n'est pas la fermeture de lui-même :(


Il est hautement improbable qu'ils ne soient pas fermés. Extrêmement même. Si la page s'arrête, la connexion est fermée. Votre problème pourrait être que la page ne cesse pas d'exécuter, trop de pages fonctionnent à la fois, vous utilisez PConnect, etc., etc., mais la chance que vous ayez un script PHP normal avec mysql_connect () que Ne fermez pas sa connexion à la fin vous semble nulle. Vous auriez trouvé un bug inconnu dans PHP.



2
votes

mysql_connect retournerait un identifiant pour la connexion réelle, que vous pouvez utiliser dans votre appel MySQL_Close.

$conn1 = mysql_connect(.....);
mysql_close($conn1);


0 commentaires