Php: probleme de lecture de fichier

Résolu
vincearoo Messages postés 4 Date d'inscription   Statut Membre Dernière intervention   -  
vincearoo Messages postés 4 Date d'inscription   Statut Membre Dernière intervention   -
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   Statut Membre Dernière intervention   211
 
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   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention   211
 
<?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   Statut Membre Dernière intervention  
 
Merci pour votre aide, ca marche impeccable !
J'ai aussi decouvert entretemps la fonction trim() qui fait le boulot sans alourdir le code.
0