Boucle While qui produit une Fiat 500 [PHP]

Leyry Hynemonth

a découvert une nouvelle définition de l'ennui.
Club iGen
18 Décembre 2004
4 145
263
Nîmes
www.lyhn.fr
Bonsoir !


Voilà... je sui pas bon en PHP.... et pourtant, j'essaye de rajouter des pièces.

J'ai un problème avec ce bout de code :

Bloc de code:
<?php
		$cpt=0;
		$fp = fopen("banniere.txt");

		//lecture du fichier banniere.txt pour savoir le nombre de lignes

		while (!feof($fp))
			{ 
				$enr = fgets ($fp,4096); 
				$tab[]=$enr;
				$cpt++;
			} 
		srand((double)microtime()*1000000);
		$nbr=rand(0,($cpt-1));
		echo "$tab[$nbr]";
	
?>
(Il s'agit d'un bout de code qui affiche aléatoirement une image dans une page web)

Cela me crée une erreur 500.

J'ai isolé que c'est les instructions de la boucle While qui me font cette erreur.

Mais comme je ne comprends pas exactement comment elle fonctionne, je n'arrive pas non plus à comprendre d'où vient l'erreur.

(En fait, je ne comprends pas la condition... je ne suis habitué qu'à l'algo :rose: , alors le coups du ! , et le coups du (xxx(y)), ça me laisse pensif.


Merci pour vos éclairages. :zen:
 
à première vu je vois rien de flagrant, je t'ai mis les commentaires, ça t'aidera à comprendre ce code que t'as manifestement repompé tel quel ;)
Bloc de code:
<?php
		$cpt=0; // initialisation du compteur
		$fp = fopen("banniere.txt"); // ouverture du fichier, enregistrement du descripteur de fichier

		//lecture du fichier banniere.txt pour savoir le nombre de lignes

		while (!feof($fp)) //  test si on a atteint la fin du fichier (!->négation, feof : end of file)
			{ 
				$enr = fgets ($fp,4096);  // lecture de 4096 octets sur le descripteur de fichier
				$tab[]=$enr; // ajout de la ligne lue dans un tableau
				$cpt++; // incrémentation du compteur
			} 
		srand((double)microtime()*1000000); //  initialisation du générateur de nombre aléatoire
		$nbr=rand(0,($cpt-1)); // choix d'un entier entre 0 et la taille maxi du tableau
		echo "$tab[$nbr]"; // affichage des 4096 octets contenus dans la ligne du tableau choisie aléatoirement
	
?>


---------- Nouveau message ajouté à 00h01 ---------- Le message précédent a été envoyé Hier à 23h58 ----------

Il est gros ton fichier txt ? t'as pas put utiliser plus de ram qu'autorisé ? Il sort d'où ce code ? Il parait pas hyper clean (descripteur de fichier non fermé, comptage des lignes à la main au lieu d'utiliser count, ...)
 
Merci pour les explication ;-) Je commence à comprendre. Quand je ne serais pas en train de déjeuner, je ferais une lecture du code plus approfondie maintenant que j'ai tes explications.

Le script vient de phpcs

Au fait, j'ai oublié une chose dans le code donné plus haut :

Bloc de code:
$fp = fopen("banniere.txt"[U],"r"[/U]);
(ça résous peut-être "descripteur de fichier non fermé" ?? :rose: )


Actuellement, le fichier txt en question est comme ceci :

Bloc de code:
<a href="http://www.ao2t.com" target="blank"><img src="http://forums.macg.co/images/banniere1.gif" width="379" height="56" border="0" alt="AO2T.com"></a>
<a href="http://www.ao2t.com" target="blank"><img src="http://forums.macg.co/images/banniere2.gif" width="468" height="60" border="0" alt="AO2T.com"></a>

Si ça c'est déjà trop gros... ça va pas le faire, car j'ai besoin de 5 à 10 images en boucles.


Je vais me renseigner sur l'usage de COUNT, et voir ce que je peux faire.

;)
 
Merci pour les explication ;-) Je commence à comprendre. Quand je ne serais pas en train de déjeuner, je ferais une lecture du code plus approfondie maintenant que j'ai tes explications.

Le script vient de phpcs

Au fait, j'ai oublié une chose dans le code donné plus haut :

Bloc de code:
$fp = fopen("banniere.txt"[U],"r"[/U]);
(ça résous peut-être "descripteur de fichier non fermé" ?? :rose: )

Non rien à voir, ça ça dit juste qu'on ouvre le fichier en lecture. Il manque un fclose à la fin, mais focalise pas sur ces détails là, je donnais ça à titre d'exemple. De toutes façons il y a des chances que php le fasse automatiquement à la fin du script. Mais c'est des indices sur la façon de coder qui montrent que c'est un truc écrit à l'arrache par un type qu'a une connaissance limitée du langage, qu'a peut-être même pas testé.
Tu sais où ça plante dans ta boucle ? À quelle occurence ?

En plus c'est crétin de stocker toutes les lignes dans un tableau pour en afficher une seule au pif après, autant tester la taille du fichier d'abord, générer le nombre aléatoire en fonction, et afficher juste la ligne voulue, sans même lire les autres. Et puis si le but c'est d'afficher une image aléatoire, là le script est hyper tordu, il suppose que t'as un gros fichier avec des images de 4096 cotets pile écrites les unes à la suite des autres, et que tu vas en prendre une au pif dedans, j'ai pas l'impression que ce soit ce que tu recherches, en plus ça envoie pas les en-têtes mime qu'il faut, t'as un script qui fait pas ce que tu veux, et qu'a été écrit par un gros sale. Trouves autre chose. D'autant que c'est pas compliqué à faire. Ou explique exactement ce que tu veux faire, on trouvera une solution.
 
C'est bien ce qu'il me semblais pour le "r"

Pour mon besoin, c'est tout simple :

J'ai un site sur Joomla, et je voudrais qu'à la place de l'entête statique, j'ai une image qui soit chargée au pif parmi celles d'un dossier, au moment du chargement de la page.

(S'il faut préciser les images quelque part, c'est pas la mort, je m'y plierais).

Je veux bien que tu m'explique comment construire cette fonction.

Je serais toujours moins idiot ce soir. :zen:
 
<?php srand(time()) ?>
<img src="tonDossier/<?=rand(0,nombreMaxDImageDansLeDossier) ?>.jpg" />
où tes images s'appellent 0.jpg, 1.jpg, 2.jpg, ... nombreMaxDImageDansLeDossier-1.jpg

si tu veux faire un truc plus intelligent qui liste tout seul les images du dossier peu importe leur nom, faut faire un truc un poil plus complexe, jète un oeil dans le manuel php pour trouver les fonctions de parcours de dossier. Y'a une belle doc en français hyper fournie.
 
  • J’aime
Réactions: Leyry Hynemonth
Effectivement, on pouvais faire plus simple, et surtout beaucoup plus fonctionnel :up:


Un grand MERCI ! :zen:
 
Salut grumff,


Si tu veux voir le résultat de ce que tu m'a aidé à faire, c'est ici : www.mjc-gruissan.com/eurojoom
Le site n'est pas terminé, mais en tout cas, il commence à être présentable.


Merci beaucoup pour ta participation.