[php]Problème de RAM serv'

Résolu/Fermé
Zep3k!GnO - 22 sept. 2005 à 11:54
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 - 22 sept. 2005 à 16:44
Bonjour à tous,

J'ai un soucis avec un de smes scripts, mon hébergeur me dit que ce dernier occupe 27 % de la RAM dispo sur leur serv' , ce qui est énorme !
Il faut que je règle ce problème a tout prix sinon ils vont me kicker de leur serv' :(

Donc je voufdrai savoir comment faire pour diminuer la mémoire utilisée par mon script ,ce dernier étant tout bête , il y a dedans 2 à 3 "for " ,
1 a 2 "switch" et pas grand chose d'autre au niveau traitement...

Si quelqu'un peu me dire comment faire pour réduire l'occupation de la RAM sur le serv' ou m'aiguiller vers un site sur lequel je pourrai trouver de la doc ça serait CoOl !
Sinon si carrément c'est le père noël qui me réponds et qui veut jeter un coups d'oeil sur le script, bah je le mettrai en ligne ... Mais c'est pas tous les jours Noël :P

Merci :D
A voir également:

4 réponses

dedale82 Messages postés 403 Date d'inscription jeudi 15 avril 2004 Statut Membre Dernière intervention 28 octobre 2008 282
22 sept. 2005 à 12:14
Salut,
sans le script on ne peut pas faire grand chose, mais si tu as deux ou trois for imbriqués, ca peut expliquer l'occupation de la ram.
le meilleur site de doc c'est encore http://www.php.net
A plus
0
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
22 sept. 2005 à 12:51
Oui tu pourrais nous montrer ton script?
0
Voilà donc l'intégralité de ce m3ch4nt script !!!!!!

<?php

require"MysqlClass.php5";
require"configmarques.php5";

$db=new mysql();

try
{
$db->connection($ADBD,$LOG,$PASS);
}
catch(DBException $e)
{
echo"PROBLEME :: ".$e->getMessage();

exit();
}
catch(Exception $e)
{
echo"Erreur non connue :: ".$e->getMessage();

exit();
}

//-----------------------------------------------------------------------------------------------------

$request="SELECT shoes,pants,sweats,tishs,jackets,caps,accessoires,chemises FROM $NOMTABLE WHERE marque='$marque'";

$db->requete($request,$NOMBASE);

//Recuperations des valeurs
$count=0; //initialisation d'une variable qui sert de compteur

/*Variable a mettre a jour selon le nombre de valeurs que l'on désire lire*/
$nbVal=8;
/*fin de mise a jourt de variable*/

//recupération des valeurs dans un tableau ---------------------------------------------------------
while($Valeur=$db->recupValeur())
{
for($i=0;$i<$nbVal;$i++) //selon le nombre d'information demandées en requête .
{

$recup[$count]=$Valeur[$i];
$count++;

}

}


//--------------fin recup !

//recherche de la page a afficher par défaut...
$cpt=0;
for($L=0;$L<8;$L++)
{
if($recup[$L]==1) //si on a une catégorie a aficher
{
$cpt++;
if($cpt==1) //et que c'est la première ..
{
switch($L)
{
case 0: $type="shoes";
break;

case 1: $type="pants";
break;

case 2: $type="sweats";
break;

case 3: $type="tishs";
break;

case 4: $type="jackets";
break;

case 5: $type="caps";
break;

case 6: $type="accessoires";
break;

case 7: $type="chemises";
break;


}

$url="cata.php5?marque=$marque&type=$type&pallier=0&sort=0";


}

}

}

if(!isset($url)) //si la variable n'existe pas.
{
$url="rien.htm";
}
if(isset($typeVOULU)) // si on veut afficher un type en particulier
{
$url="cata.php5?marque=$marque&type=$typeVOULU&pallier=0&sort=0";

}

//--FIN de la recherche



echo"<html><head>
<script language=\"javascript\">
function link(url)
{

parent.catalogue.location.href=url;

}

</script>

<link href=\"tableau.css\" rel=\"stylesheet\" type=\"text/css\">
</head>
<body onLoad=\"javascript:link('$url')\"><table width=\"80\" >";

if($marque=="plus")
{
$markA="Toutes les marques";
}
else
{
$markA=$marque;
}

echo"
<tr><td height=\"26\" align=\"center\" bgcolor=\"#D40A0A\"><font color=\"white\"><b>$markA</b></font></td></tr> ";

for($i=0;$i<8;$i++)
{
switch($i)
{
case 0: $aff="shoes";
break;

case 1: $aff="pants";
break;

case 2: $aff="sweats";
break;

case 3: $aff="tishs";
break;

case 4: $aff="jackets";
break;

case 5: $aff="caps bonnets";
break;

case 6: $aff="accessoires";
break;

case 7: $aff="chemises";
break;

}

if($recup[$i]!=0) //si le champ existe
{
echo"<tr><td height=\"35\" class=\"fin_noir\" align=\"center\" bgcolor=\"#CDC8C8\"><a class=\"sten\" href=\"cata.php5?marque=$marque&type=$aff&pallier=0&sort=0\" target=\"catalogue\">$aff</a></td></tr>";
}
else
{
//echo"<tr><td height=\"40\" align=\"center\"><font color=\"#CCCCCC\">$aff</font></td></tr>";
}

}

echo"</body></html></table>";

?>
0
Merci mec :D Je vais aller voir ça car ça me gav un p'ti peu quand même ce Pb de ram à la !
0
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
22 sept. 2005 à 14:45
Bon, tu peux essayer deux trois trucs pour alléger ton script.

D'abord, ton script récupère les champs mysql avec des index numeriques, si tu utilisais mysql_fetch_assoc, tu pourrais te passer de l'utilisation du switch.

Ensuite tu as déjà une boucle for($i=0;$i<$nbVal;$i++) et tu relances à peu près la même (une boucle pour la récupération, et une autre pour le traitement et l'affichage, sans compter que tu relances le même switch plus tard).

Tu pourrais combiner les trois boucles en une.
D'ailleurs avec ça tu pourras te permettre de n'utiliser que $Valeur[$i] et te passer de $recup[$count].

Je me demande un truc, est ce que pour ta requête tu n'obtiens toujours qu'une seule ligne de résultat ou est ce que tu en as plusieurs?
0
"Je me demande un truc, est ce que pour ta requête tu n'obtiens toujours qu'une seule ligne de résultat ou est ce que tu en as plusieurs?"

-->Ce que j'ai en retour c'est une seule' ligne' car chaque marque est unique et a ses attributs comme shoes,sweats ...

xD Merci je vais tester ça...
Mais par hasard t'aurais pas une méthode pour tester la RAM utilisé par un script afin que je sache avant de remettre en ligne si j'ai oui ou non réussi a réduire l'utilisation de la RAM...

Merki
0
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
22 sept. 2005 à 15:05
Non, je crois qu'il y a une fonction pour contrôler le temps d'execution du script par contre, mais je ne retrouve plus son nom.

Je suppose que le mieux c'est de ne pas faire de boucles inutiles, de minimiser le nombre de variables (s'il y a des variables qui contiennent la même chose et d'autant plus si ce sont des grosses valeurs, dans ton cas autant s'arranger pour s'en passer).

En bref: optimiser ton algorithme le plus possible, avoir un temps d'execution moins long si possible etc....

-->Ce que j'ai en retour c'est une seule' ligne' car chaque marque est unique et a ses attributs comme shoes,sweats ...

Donc pour une marque donnée, tu n'as que un pantalon, un short, une chemise etc...? C'est bien ça?
0
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
22 sept. 2005 à 15:10
Une astuce pour contrôler le temps d'execution:
http://www.phpcs.com/code.aspx?ID=32471
0
Zep3k!GnO > kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016
22 sept. 2005 à 15:31
En fait ce script sert a l'affichage d'un menu dans lequel seront présentes seules les rubriques que la marque contient.
Exemple j'ai une marque 'EMERICA' , on a des shorts, des sweats des shoes et des tishs de cette marque dans le shop.
alors dans une table nommée marque j'y insert la nouvelle marque 'EMERICA' et je mets des 0 ou ds 1 dans les différents champs :
1 pour shoes,1 pour sweats (1 qd c'est présent,sinon 0), 0 pour chemise,0 pour accessoires..etc
A l'appel de mon script,je ragarde ce que la marque contient comme rubrique , la ou il y a des 1 , j'affiche l'intitulé de la rubrique dans le menu .
J'espère que je suis clair car c'est pô facile a Xpliquer comme ça dans le flow alors que c'est assez Zarb ;P .
En tout cas , MERCI de ton aide c'est CoOl d'avoir du soutient car je lutte depuis pas mal de temps sur ce BaZzzZArd !!!!
:D
0
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527 > kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016
22 sept. 2005 à 15:59
En ce cas, tu n'as donc qu'une ligne de résultat (un seul tuple).
Donc a priori, pas besoin de
while($Valeur=$db->recupValeur()) 

Tu peux le transfomer en
$Valeur=$db->recupValeur()


Ca fait un bloc d'indentation en moins, que du bonus :-)
0