Php: probleme de lecture de fichier

Résolu/Fermé
vincearoo Messages postés 4 Date d'inscription jeudi 15 mai 2008 Statut Membre Dernière intervention 16 mai 2008 - 15 mai 2008 à 05:44
vincearoo Messages postés 4 Date d'inscription jeudi 15 mai 2008 Statut Membre Dernière intervention 16 mai 2008 - 15 mai 2008 à 09:39
Bonjour,

Dans une page web j'utilise le code php suivant :
<?php
$seq = fopen("albums/sequence.dat.php", "r");
while (!feof($seq))
  {
  $album = fgets($seq);
  echo $album;
  $dat = fopen("albums/$album.dat.php", "r");
  list($type,$titre,$nombre,$date) = explode('|',fgets($dat));
  echo "($titre)";
  fclose($dat);
  }
fclose($seq);
?>


Le fichier "sequence.dat.php" contient une simple liste du type :
fichier_1
fichier_2
...
fichier_n


Chaque fichier "fichier_i.dat.php" comporte de multiple informations. La premiere ligne de chacun de ces fichiers est du type :
photo|peloche-i|36|jj-mm-aaaa


Ce code retourne :
fichier_1 ()fichier_2 ()fichier_3 () ... fichier_n(peloche-n)

En fait, quelle que soit l'ordre de la séquence ou le nombre d'éléments, seul le titre associé au dernier fichier de la liste est affiché ! Je ne comprends pas pourquoi...

Merci de votre aide !
A voir également:

3 réponses

Tiller Messages postés 781 Date d'inscription mercredi 4 juillet 2007 Statut Membre Dernière intervention 14 septembre 2008 211
15 mai 2008 à 09:04
Je ne pense pas que cela vienne de sa, mais il faut toujours séparé les variables, certe cela fonctionne dans les quotes, mais pas au top... Très mauvaise habitude
<?php
$seq = fopen("albums/sequence.dat.php", "r");
while (!feof($seq))
  {
  $album = fgets($seq) or die('Bug 5');
  echo $album;
  if (!is_file('albums/'.$album.'.dat.php')) die('Bug 6');
  $dat = fopen("albums/".$album.".dat.php", "r") or die('Bug 1');
  $c_dat = fgets($dat) or die('Bug 2');
  list($type,$titre,$nombre,$date) = explode('|', $c_dat) or die('Bug 3');
  echo "(".$titre.")";
  fclose($dat) or die('Bug 4');
  }
fclose($seq);
?>


A part sa c'est le seul truc qui pour moi, pourrait ne pas marcher

Essaie avec les "or die" aussi
0
vincearoo Messages postés 4 Date d'inscription jeudi 15 mai 2008 Statut Membre Dernière intervention 16 mai 2008
15 mai 2008 à 09:06
Je crois avoir trouvé l'origine du problème ! Mais toujours pas la solution...

Lorsque le script lit le fichier "sequence.dat.php" il voit un espace a la fin de chaque ligne sauf la dernière. Du coup ma variable $album prend tour à tour la valeur "fichier_1 ", "fichier_2 ", ... , "fichier_n" et ma variable $dat pointe vers les fichiers "albums/fichier_1 .dat.php", "albums/fichier_2 .dat.php", ... , "albums/fichier_n.dat.php". Seul ce dernier existe.

Quelqu'un saurait-il comment contourner ce problème ? Mon éditeur de texte (wordpad /XP ou Kate /linux) ne voit bien sur aucun espace en fin de ligne.
0
Tiller Messages postés 781 Date d'inscription mercredi 4 juillet 2007 Statut Membre Dernière intervention 14 septembre 2008 211
15 mai 2008 à 09:14
<?php
$seq = fopen("albums/sequence.dat.php", "r");
while (!feof($seq))
{
	$album = fgets($seq);
	echo $album;
	
	for ($i = 0; $i < 2; $i = 0)
	{
		$c1 = (substr($album, -2) == "\r");
		$c2 = (substr($album, -2) == "\n");
		$c3 = (substr($album, -2) == "\t");
		
		if (substr($album, -1) == ' ')
			$album = substr($album, 0, -1);
		
		elseif ($c1 || $c2 || $c3)
			$album = substr($album, 0, -2);
		
		else
			$i = 5;
	}
	
	$dat = fopen("albums/".$album.".dat.php", "r");
	list($type,$titre,$nombre,$date) = explode('|',fgets($dat));
	echo "(".$titre.")";
	fclose($dat);
}
fclose($seq);
?>
0
vincearoo Messages postés 4 Date d'inscription jeudi 15 mai 2008 Statut Membre Dernière intervention 16 mai 2008
15 mai 2008 à 09:39
Merci pour votre aide, ca marche impeccable !
J'ai aussi decouvert entretemps la fonction trim() qui fait le boulot sans alourdir le code.
0