Page 1 sur 1

petite question sur mysql_close / mysql_free_result

Posté : 02 nov. 2007, 22:59
par choubix
hello,

je me demdandais si je devais mettre un mysql_close et / ou un mysql_free_result en fin de page dans le cadre de fichiers php qui font des redirections via "header:"

le script ne va pas au bout de la page, il redirige vers la page cible du header non?
donc je devrais mettre mon mysql_close et/ou mon mysql_free_result a ce moment la non?

merci

Posté : 03 nov. 2007, 01:36
par Ryle
Ca dépend :) (ouais, je sais, ça dépend, ça dépasse ;))

Déjà il faut savoir que quand php rencontre la fonction header() avec le paramètre location, il se contente d'informer le navigateur que celui-ci va être redirigé vers une nouvelle adresse et c'est tout. PHP continue l'exécution du script. Ainsi, si tu mets à jour une données en session après une redirection dans ton code, ta variable sera quand même modifiée sur la page suivante.

Pour éviter cela, il vaut mieux faire suivre les header() d'un exit() pour signaler à php qu'il n'a plus rien à faire à partir de ce point :)

A partir de là, tout dépend de ton code. Sachant qu'à la fin de l'exécution du script toutes les connexions sont refermées et les ressources libérées, si tu colles un exit() pas besoin de t'embêter (certains diront que c'est malgré tout plus propre de libérer ses ressources). En revanche si tu as besoin de l'exécution du code qui suit, alors il peut être judicieux de les libérer le temps que php arrive au bout du script :)

Posté : 03 nov. 2007, 11:07
par Hywan
Eh oui, ça dépend ça dépasse ;-). Je pensais être le seul à la faire celle là. OOof ! Je me sens mieux hehe.

PHP ferme les connexions vers MySQL & co tout seul (dans la théorie), et il est également censé libérer la mémoire (logique, on ferme et libère). Si tu viens du monde Java, c'est un peu le principe du Garbage Collector (oui, je sais, ce n'est pas exactement ça, mais sur le principe ça y ressemble). Mais comme dans le monde Java, il y a cette polémique. Le Garbage Collector, c'est bien, mais il y a une contre-partie : la machine virtuelle de Java parcours sans cesse la mémoire, et ça à un coût.
Si tu veux donc t'assurer que ton script est performant, décides toi même où et quand arrêter ou libérer la mémoire de tes connexions vers tes bases de données. Tu seras sûr du résultat. Pour ma part, c'est ce que je fais, je me sens mieux dans ma tête après (c'est déjà ça ;-)).

Et pour les headers, je n'ai rien à ajouter si ce n'est un petit doute : les exit fonctionnent dans les buffers ? Je n'y ai jamais pensé pour tout vous dire. Àmha oui.