trier le contenu d'un readdir()

trier le contenu d'un readdir() - PHP - Programmation

Marsh Posté le 18-09-2005 à 18:45:07    

Salut,
 
je viens de faire une recherche sur le forum mais j'ai pas vraiment trouvé la réponse à mon probleme...
 
Voila mon code :
 

Code :
  1. $oDir = opendir($LogDir);
  2.         while (false !== ($logFiles = readdir($oDir))) {
  3.                 if ($logFiles != "." && $logFiles != ".." ) {
  4.                 $this_file = array(count($logFiles),$logFiles);
  5.                 sort($this_file);
  6.                 print_r($this_file);
  7.        
  8.                 $filesize = round(filesize($LogDir."/".$this_file[1]) / 1024,2);
  9.                         print "<input type=checkbox value=".$this_file[1]." name=logfile[]>&nbsp;<a href=".$_SERVER["PHP_SELF"]."?a=viewlog&v=".$this_file[1].">".$this_file[1]."</a> - (".$filesize." Ko)<br />\n";
  10.                 }
  11.         }


 
Donc je colle le résultat dans un tableau. Le print_r renvoi ca :
 

Code :
  1. Array ( [0] => 1 [1] => 20050917-history.log )  20050917-history.log - (0.13 Ko)
  2. Array ( [0] => 1 [1] => 20050916-history.log )  20050916-history.log - (0.61 Ko)
  3. Array ( [0] => 1 [1] => 20050914-history.log )  20050914-history.log - (0.55 Ko)
  4. Array ( [0] => 1 [1] => 20050915-history.log )  20050915-history.log - (0.85 Ko)
  5. Array ( [0] => 1 [1] => 20050918-history.log )  20050918-history.log - (0.8 Ko)


 
Donc forcement mon sort() ne fonctionne pas ...  
 
Si vous avez une idée de la méthode a utiliser, je suis preneur :)
 
Merci

Reply

Marsh Posté le 18-09-2005 à 18:45:07   

Reply

Marsh Posté le 19-09-2005 à 00:01:05    

Tu veux le trier comment le contenu de ton readdir ?
Déjà trier le contenu d'un readdir ça a pas trop de sens, readdir renvoyant une string.
Puis sinon, readdir lit les fichiers et dossiers présents dans ton dossier dans l'ordre alphabétique, la plupart des fs organisant les fichiers comme cela.
Donc à priori pas besoin de sort


Message édité par claque2000 le 19-09-2005 à 00:01:56

---------------
Linux registered user #352556
Reply

Marsh Posté le 19-09-2005 à 00:16:01    

je souhaite trier mes fichiers par nom (ascendant ou descendant, peut importe pour le moment). Le site tourne sur un systeme GNU/Linux, le fs est en ext3 (pas de lien direct je presume). Lorsque j'affiche le resultat "brut" du readdir, le resultat est ce que j'ai indiqué dans mon precedent post, a savoir  
 

Code :
  1. 20050917-history.log
  2. 20050916-history.log
  3. 20050914-history.log
  4. 20050915-history.log
  5. 20050918-history.log


 
Bien entendu, si j'affiche le contenu du répertoire qui contient ces fichiers via un ls -l, ils sont correctement triés. Je souhaiterai pouvoir récuperer cet ordre sur la page, histoire que ce soit un peu plus cohérent (ouais c'est de l'esthetisme je suis d'accord ;) )
 
Merci :)


Message édité par syl94 le 19-09-2005 à 00:18:22
Reply

Marsh Posté le 19-09-2005 à 00:43:45    

Hum effectivement, sous macosx, l'affichage se fait dans l'ordre alphabétique mais sous linux, il semblerait que ce soit ordonné plus par date de création du fichier avec les noms de fichiers débutant par une lettre avant ceux commencant par un chiffre (ceci étant le résultat obtenu après divers test de l'affichage brut du readdir sur un serveur linux).  
 
La solution si tu utilise php5 est scandir :  
 http://fr2.php.net/manual/en/function.scandir.php
 
Sur cette page est aussi proposée l'alternative pour php4 qui fonctionne sous linux(tested)


---------------
Linux registered user #352556
Reply

Marsh Posté le 19-09-2005 à 08:43:53    

ok je connaissais pas cette alternative. Je vais tester ca.
 
Merci

Reply

Marsh Posté le 19-09-2005 à 11:35:57    

Et avant php5, il suffit de transformer la chaine de caractére en ttableau et d'ordonner le tableau.

Reply

Marsh Posté le 19-09-2005 à 22:23:12    

bon j'ai trouvé une solution alternative :
 

Code :
  1. $files = array();
  2.         while (false !== ($logFiles = readdir($oDir))) {
  3.                 if ($logFiles == "." || $logFiles == ".." ) continue;
  4.                 $files[] = $logFiles;
  5.         }
  6.         sort($files);
  7.         for ($i=0;$i<count($files);$i++) {
  8.                 $filesize = round(filesize($LogDir."/".$files[$i]) / 1024,2);
  9.                 print "<input type=checkbox value=".$files[$i]." name=logfile[]>&nbsp;<a href=".$_SERVER["PHP_SELF"]."?a=viewlog&v=".$files[$i].">".$files[$i]."</a> - (".$filesize." Ko)<br />\n";
  10.         }


 
le resultat est correctement trié :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed