Anthotill
Messages postés127Date d'inscriptionmardi 19 août 2003StatutMembreDernière intervention13 mars 2010
-
13 déc. 2005 à 19:48
cs_Anthomicro
Messages postés9433Date d'inscriptionmardi 9 octobre 2001StatutMembreDernière intervention13 avril 2007
-
21 déc. 2005 à 14:46
Bonjour à tous !
J'ai un probleme avec un site, il mange toute la mémoire RAM d'un serveur web est le fait planter.
J'aurais aimé savoir ce qui pouvais conduire a se résultat, je me demandais si lorsque l'on oublie plusieurs fois de fermer la connexion a Mysql (mysql_close()) ca pouvais saturer la RAM d'un serveur à un point qu'il plante ?
cs_Anthomicro
Messages postés9433Date d'inscriptionmardi 9 octobre 2001StatutMembreDernière intervention13 avril 20078 15 déc. 2005 à 13:34
le mysql_free_result ce n'est là que pour vider la mémoire au cas où t'en aurais besoin ensuite dans le script, (en gros si mettons t'as 8 Mo par script, que ta requête te bouffe 5 Mo et que t'as besoin de 4 Mo ensuite, bah tu fais un mysql_free_result($requete) pour te libérer les 5 Mo bouffés précédemment, mais si t'en as pas besoin bah tu ne mets pas de free result car la mémoire sera libérée à la fin du script).
pichpoich
Messages postés26Date d'inscriptionlundi 5 janvier 2004StatutMembreDernière intervention29 janvier 2009 16 déc. 2005 à 09:38
[font=Lucida Console]
Une boucle infinie, c'est un calcul que tu fais faire en boucle et qui n'a pas de condition de sortie, ce qui fait que la machine effectue un calcul qui ne ne s'arrete jamais.
il n'y a pas que les while qui peuvent faire une boucle infinie, il y a aussi les for. Par exemple :
for($i=5;$i>=0;$i++)
{
//instruction
}
va faire une boucle infinie car $i s'incrémente de +1 à chaque boucle et la condition de sortie est que $i doit rester positif, ce qui est toujours le cas, donc le calcul ne s'arretera jamais, c'est une boucle infinie.
Bon, l'exemple est en carton, c'est le résultat d'une erreur de programation, là il aurait fallu écrire (par exemple, il y a plusieurs solutions):
for($i=5;$i>=0;$i--)
{
//instruction
}
alors il va falloir que tu te cogne toutes les boucles pour voir si les conditions de sortie sont bonnes ou voir comment sortir d'une boucle (mais là je ne peut pas grand chose pour toi, je suis moi-même un peu limite dans ce domaine).
Salut
Console
Vous n’avez pas trouvé la réponse que vous recherchez ?
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 16 déc. 2005 à 09:51
Une boucle infinie, tu t'en rendrais compte je pense .
Comme son nom l'"indique, une boucle infinie est...infinie. Donc elle ne rend jamais la main. Au bout d'un moment, le script s'arrête à cause du timeout de php.
Bref, tu aurais une erreur fatale avec un time out.
Par contre, une boucle sur tout une page, ça fait long. Il se peut que tu aies des boucles très longues, avec des traitements lourds.
pichpoich
Messages postés26Date d'inscriptionlundi 5 janvier 2004StatutMembreDernière intervention29 janvier 2009 16 déc. 2005 à 10:06
Il me semble que : $ligne = mysql_fetch_array($req1) dansfor ($cpt 0; $ligne mysql_fetch_array($req1); $cpt++)
{
$tab[$cpt]['id'] = $ligne['id'];
$tab[$cpt]['categorie'] = $ligne['categorie'];
$tab[$cpt]['total'] = $ligne['total'];
}
ne soit pas une condition de sortie valable car c'est $cpt qui est initialisé à 0 et qui s'incrémente de +1, mais la condition de sortie $ligne = mysql_fetch_array($req1) ne fait aucune référence à $cpt (peut-être n'est-ce pas obligatoire remarque), par contre il me semble qu'on doit s'attendre à un nombre alors que mysql_fetch_array ne sort pas un nombre mais un tableau indexé sur les nombres en cas de mysql_fetch_array($res2,MYSQL_NUM) et indexé sur les noms de champs en cas de mysql_fetch_array($res2,MYSQL_ASSOC).
Bon, étant matheux à la base, je réagis peut-être trop comme tel et donc pour moi un boucle for n'a que des nombres comme références, mais peut-être que je me trompe.
A plus.
pichpoich
Messages postés26Date d'inscriptionlundi 5 janvier 2004StatutMembreDernière intervention29 janvier 2009 16 déc. 2005 à 14:10
Et si tu essayais :
$cpt=0;
While ($ligne = mysql_fetch_array($req1))
{
$tab[$cpt]['id'] = $ligne['id'];
$tab[$cpt]['categorie'] = $ligne['categorie'];
$tab[$cpt]['total'] = $ligne['total'];
$cpt=$cpt+1;
}
au lieu de
for ($cpt 0; $ligne mysql_fetch_array($req1); $cpt++)
{
$tab[$cpt]['id'] = $ligne['id'];
$tab[$cpt]['categorie'] = $ligne['categorie'];
$tab[$cpt]['total'] = $ligne['total'];
}
la boucle s'aretterait dés qu'il n'y a plus de ligne à lire sans que tu ais besoin de calculer le nombre d'itérations, et tu aurais quand même des valeurs pour $cpt, non ?
à plus.
Anthotill
Messages postés127Date d'inscriptionmardi 19 août 2003StatutMembreDernière intervention13 mars 2010 13 déc. 2005 à 23:22
Tous le site utilise des requettes simple :
<?php
include ('connexion.php');
$sql = "SELECT * FROM site ORDER BY `annee` DESC";
$req = mysql_query($sql) or die('Erreur SQL !
'.$sql.'
'.mysql_error());
while($data = mysql_fetch_assoc($req))
{
echo '[articles.php?annee=',$data['annee'],' ',$data['annee'],'] - ';
}
?>
<?php mysql_close(); ?>
Il faudrais mieux ouvrir la connexion en haut de page et la fermer en bas plutôt qu'a chaque requette ?
Il faut aussi remplacer les SELECT * par SELECT id,titre,date par exemple ?
Anthotill
Messages postés127Date d'inscriptionmardi 19 août 2003StatutMembreDernière intervention13 mars 2010 14 déc. 2005 à 18:29
Antho ca pose un prob si je fais un include du fichier de connexion tout en haut de ma page avant même le code HTML ? car je sais pas utiliser les header alors je vais faire comme ca si ca fonctionne...