Problème de boucle ?!

Résolu/Fermé
Benjamincom Messages postés 232 Date d'inscription vendredi 21 décembre 2007 Statut Membre Dernière intervention 19 septembre 2021 - 9 janv. 2009 à 18:23
Benjamincom Messages postés 232 Date d'inscription vendredi 21 décembre 2007 Statut Membre Dernière intervention 19 septembre 2021 - 9 janv. 2009 à 20:07
Bonjour,
J'utilise le script suivant sur ma page principale :
$opi = fopen("$page"."-k.php","r+");
	while(!feof($opi)) {
	$l = fgets($opi,255);
	$content .= $l;
	}
	// Transformation des balise du système
	$define = array('{AFFICHER_EN_LIGNE}');
	$defined = array('');
	$content = str_replace($define,$defined,$content);
	//
	while(ereg('doc:', $content)){ include('include-doc.php'); }
echo $content;
fclose($opi);


Donc le fgets me permet de récupérer ma page sous la forme de variable et par conséquent me permet de transformer le texte en smileys par exemple. Mais le problème c'est le while qui ne fonctionne pas apparemment, celui-ci permet de détecter si "doc:" est présent dans une de mes pages et d'inclure un fichier si c'est le cas.
Mais sa ne veux pas fonctionner, boucle infini (soit disent).

4 réponses

Bonjour

Normal que ça fasse une boucle infinie.
La condition dans le while ne change jamais. Donc si elle est vraie une fois, elle l'est toujours. Donc il n'y a aucune raison de sortir du while.
Tu as besoin d'un simple test ici, l'instruction if suffira
0
Benjamincom Messages postés 232 Date d'inscription vendredi 21 décembre 2007 Statut Membre Dernière intervention 19 septembre 2021 61
9 janv. 2009 à 19:18
Non le if ne vas pas car il faut que le code se répété selon le nombre de fois qu'il a detecté "doc:" dans la variable. Sinon ce code ne sert à rien.
0
Pourtant, dans ton premier message, tu ne parlais d'inclure qu'une fois. M'enfin.
Il suffit, quand tu as trouvé don doc: une fois, de "couper" le début de ton $content de façon à faire disparaître le doc qui a déjà été trouvé. Actuellement, tu retrouves toujours le même à chaque boucle, alors elle ne s'arrête jamais.

Pour ça, il vaut mieux utiliser la fonction strpos qui te dit où ton 'doc:' a été trouvé :

while( ($x = strpos($content,'doc:'))!==false){
include('include-doc.php');
$contents=substr($content,$x+1); // coupe après le 'd'
}

Le !== n'est pas une erreur.
0
Benjamincom Messages postés 232 Date d'inscription vendredi 21 décembre 2007 Statut Membre Dernière intervention 19 septembre 2021 61
9 janv. 2009 à 20:07
A beh merci je ne connaissais pas cette fonction ^^
Ca marche parfaitement bien ;)
0