OVH Cloud OVH Cloud

tableau de mots

5 réponses
Avatar
Frank
Je tente d'executer le code suivant pour créer une liste de mots à
partir d'un champ texte:

--------------------------------------------------

$rech=$_POST['recherche'];

$mot_rech = "";
$i_rech=0;
$caract_rech=$rech[$i_rech];

$i_mot_rech_liste=0;

while($caract_rech != "")
{
while(($caract_rech != '.') && ($caract_rech != ',') &&
($caract_rech != ' '))
{
$mot_rech=$mot_rech.$caract_rech;
$caract_rech=$rech[$i_rech];$i_rech++;
}
if($mot_rech != "")
{
****** $mot_rech_liste[$i_mot_rech_liste] = $mot_rech;
$i_mot_rech_liste++;
}
}
--------------------------------------------------
J'obtiens le message suivant:

Fatal error: Allowed memory size of 8388608 bytes exhausted (tried to
allocate 35 bytes) in
/home/4562770609/www/web/vehiculesvolesrecherche.php on line 113 (celle
avec ******)

Que devrais-je faire pour régler cela?

5 réponses

Avatar
loufoque
Frank a dit le 18/01/2005 23:14:

Que devrais-je faire pour régler cela?


modifier la limite de mémoire tolérée pour les scripts php ?

Avatar
Olivier Miakinen
Je tente d'executer le code suivant pour créer une liste de mots à
partir d'un champ texte:


Ok, voyons voir.

$rech=$_POST['recherche'];

$mot_rech = "";
$i_rech=0;
$caract_rech=$rech[$i_rech];


La syntaxe $rech[$i_rech] reste reconnue dans PHP 4, mais elle est
obsolète. Lui préférer $rech{$i_rech}.

$i_mot_rech_liste=0;

while($caract_rech != "")


À mon avis, ton erreur est là. Contrairement à ce qui se passe en C,
rien ne dit que le caractère qui suit ta chaîne est nul. De plus,
je ne suis même pas sûr que la chaîne constituée d'un caractère nul
soit considérée comme égale à la chaîne vide (c'est-à-dire que "<nul>"
== "") et donc ta boucle est probablement infinie : while(true).

Fais plutôt un test comparant $i_rech avec strlen($rech).


Cordialement,
Olivier

Avatar
Olivier Miakinen

[ boucle qui consomme 8388608 octets de mémoire en traitant le
résultat d'un $POST ]

Que devrais-je faire pour régler cela?


modifier la limite de mémoire tolérée pour les scripts php ?


Ça existe, des machines à mémoire infinie ?

;-)


Avatar
Marc

Que devrais-je faire pour régler cela?


pourquoi ne pas utiliser split() ?

Avatar
Christophe MERESSE
Bonjour,

Juste une petite question aux modérateurs (pas la peine de publier)

J'ai envoyé cette reponse le 18 janvier à 23h59 et elle n'apparait pas dans
google groups
alors qu'elle apparait bien dans mon serveur de news (news.urbanet.ch).
D'autres posts plus recents même sur cette question sont dans google depuis
longtemps maintenant.

Du coup je commence à douter, est-ce google qui m'a oublié ou est-ce mon
serveur de news qui
marche un coup sur deux ? Avez-vous vu mon post passer ?

Merci
Christophe



"Christophe MERESSE" a écrit dans le message de news:
csk4d9$lbc$

"Frank" a écrit dans le message de news:

Je tente d'executer le code suivant pour créer une liste de mots à
partir d'un champ texte:


Houla, c'est bien compliqué.

$rech=$_POST['recherche'];

$mot_rech = "";
$i_rech=0;
$caract_rech=$rech[$i_rech];

$i_mot_rech_liste=0;

while($caract_rech != "")


Ici je ferais plutôt un while($i_rech < strlen($rech))

{
while(($caract_rech != '.') && ($caract_rech != ',') &&
($caract_rech != ' '))
{
$mot_rech=$mot_rech.$caract_rech;
$caract_rech=$rech[$i_rech];$i_rech++;


Deja, ici il me semble que tu devrais incrementer $i_rech avant
d'affecter $caract_rech sinon tu obtiendras 2 fois le premier charactere
de $rech

}
if($mot_rech != "")
{
****** $mot_rech_liste[$i_mot_rech_liste] = $mot_rech;
$i_mot_rech_liste++;
}
}
--------------------------------------------------
J'obtiens le message suivant:

Fatal error: Allowed memory size of 8388608 bytes exhausted (tried to
allocate 35 bytes) in
/home/4562770609/www/web/vehiculesvolesrecherche.php on line 113 (celle
avec ******)

Que devrais-je faire pour régler cela?


Commencer par regarder ici
http://ch2.php.net/manual/fr/function.preg-split.php
et faire ca:
$mot_rech_liste = preg_split("/[s,.]+/",
(isset($_POST['recherche'])?$_POST['recherche']:""));

C'est pas beau la vie en php ? :)

Christophe