fonction is_dir() qui bug

fonction is_dir() qui bug - PHP - Programmation

Marsh Posté le 06-09-2004 à 11:02:52    

Salut tout le monde !
 
J'ai l'impression que la fonction is_dir() de php bug.
 
J'ai la fonction suivante pour liste les dossiers d'un dossier:
 

Code :
  1. function tab_list_dir($dossier)
  2. {
  3. $d=opendir($dossier);
  4. echo "$dossier";
  5. while($f=readdir($d))
  6. {
  7.  //if (!is_file($f) && $f != "." && $f != ".." && $f!="index.php" && $f!=".htaccess" )
  8.  if (is_dir($f) )
  9.  {
  10.  echo $dir[]="<a href=\"?".$url."dossier=".$f."\">".$f."</a>";
  11.  }
  12. }
  13.  closedir();
  14.  @sort($dir);
  15. return $dir;
  16. }


 
lorsque $dossier="."; il n'y a pas de problemes, mais lorsque je met une adresse du type $dossier="dossier/dossier2"; ben ca ne m'affiche que "." et ".."
 
est ce que ca vous fait pareil chez vous ?
 
La seul solution que j'ai trouvé a ca, c'est d'utiliser !is_file() au lieu de is_dir(), mais j'aimerai bien savoir si c'est un bug ou non.
 
merci d'avance :hello:
 
 


---------------
Découvre le HFRcoin ✈ - smilies
Reply

Marsh Posté le 06-09-2004 à 11:02:52   

Reply

Marsh Posté le 06-09-2004 à 11:54:05    

j'ai eu la même chose, j'ai utilisé la même solution :)


---------------
uptime is for lousy system administrators what Viagra is for impotent people - mes unixeries - github me
Reply

Marsh Posté le 06-09-2004 à 11:55:17    

j'ai pas eu ce probleme :/

Reply

Marsh Posté le 06-09-2004 à 11:56:01    

jutilise bcp cette fonction et j'ai jamais eu ce pb :/ ton serveur est sous quel OS ?

Reply

Marsh Posté le 06-09-2004 à 12:07:15    

"./dossier/dossier2" peut etre non?
ou un chemin complet ("/home/fabien/dossier/dossier2" )


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 06-09-2004 à 12:12:02    

neogally a écrit :

jutilise bcp cette fonction et j'ai jamais eu ce pb :/ ton serveur est sous quel OS ?

ben j'ai testé sous windows et linux et ca fait pareil :/
 


---------------
Découvre le HFRcoin ✈ - smilies
Reply

Marsh Posté le 06-09-2004 à 12:18:05    

the real moins moins a écrit :

"./dossier/dossier2" peut etre non?
ou un chemin complet ("/home/fabien/dossier/dossier2" )

je viens de tester ca fait pareil [:spamafote]
 
apparement ca a l'air d'etre un bug :gratgrat:
 


---------------
Découvre le HFRcoin ✈ - smilies
Reply

Marsh Posté le 06-09-2004 à 12:18:32    

neogally a écrit :

jutilise bcp cette fonction et j'ai jamais eu ce pb :/ ton serveur est sous quel OS ?

t'as quelle version de php et t'es sur quel os ?
 


---------------
Découvre le HFRcoin ✈ - smilies
Reply

Marsh Posté le 06-09-2004 à 12:50:49    

linux et php 4.3.x je c plus quelle version exactement :/

Reply

Marsh Posté le 06-09-2004 à 13:10:28    

C'est normal que ca fonctionne pas ton truc, tu as pas fait de chdir, tu peux t'en passer, mais alors voila comment faut faire :
 

Code :
  1. function tab_list_dir($dossier)
  2. {
  3.      $url = '';
  4.      $d=opendir($dossier);
  5.      echo "$dossier";
  6.      while(false !== ($f = readdir($d)))
  7.      {
  8.          //if (!is_file($f) && $f != "." && $f != ".." && $f!="index.php" && $f!=".htaccess" )
  9.          if (is_dir($dossier.$f) )
  10.          {
  11.          echo $dir[]="<a href=\"?".$url."dossier=".$f."\">".$f."</a>";
  12.        
  13.          }
  14.        
  15.        
  16.      }
  17.      closedir();
  18.      @sort($dir);
  19.      return $dir;
  20. }
  21. tab_list_dir('./temp/');


 
Deux trois conseils
-Initialise ta variable $url
-Ajoute bien le '/' à la fin de ton dossier.
-Si c'est bien pour de l'affichage oublie pas les retours à la ligne.
 

Reply

Marsh Posté le 06-09-2004 à 13:10:28   

Reply

Marsh Posté le 06-09-2004 à 13:23:22    

pourquoi tu me dis qu'il faut que je change de dossier ? moi je veux lire qu'un seul dossier pour savoir ce qui contient et extraire les noms des eventuels dossiers qu'il y a dedans.


---------------
Découvre le HFRcoin ✈ - smilies
Reply

Marsh Posté le 06-09-2004 à 13:34:39    

Car ta fonctionne is_dir n'est pas complementaire de ta fonction readir / opendir (tu lui passe nul par d'handle.
alors imagine que tu as deux opendir / readdir en meme temps elle fait comment pour savoir quel dossier traiter)
Elle traite le repertoire courant donc si tu es dans le repertoir './' et tu lis les repertoires de './tmp/' ca correspondra pas.
 
Un truc ton con, fait un test de ta fonction
.
..
test
tmp
-test
-test2
 
donc tu es la : './'
tu as les repertoires test et tmp  
le repertoir tmp a les dossiers test et test2
 
Utilise ta fonction sur tmp tu vas voir il va te ressortir test. Car il existe à la racine, lieu ou s'execute le script.
Maintenant si tu utilises ma version ou tu lances un chdir($dossier) ca fonctionnera.


Message édité par Sebastien le 06-09-2004 à 13:36:54
Reply

Marsh Posté le 06-09-2004 à 14:17:12    

sebastien> bizarre ton explication, normalement le opendir() devrait faire automatiquement le changement de dossier.  
Sinon, c'est quoi ta version avec le chdir($dossier) ? je le met dans le code ? avant ou aprés le opendir ?


---------------
Découvre le HFRcoin ✈ - smilies
Reply

Marsh Posté le 06-09-2004 à 14:26:02    

Non mon explication est pas bizarre.
Opendir te place un pointeur sur un repertoire.
chdir change le repertoire courant de php.
 
et oui si tu veux utiliser le chdir tu dois simplement le mettre dans ta fonction avant le test du is_dir mais c pas la meilleur solution, la meilleur reste celle que j'ai ecrite :
is_dir($dossier.$filename)


Message édité par Sebastien le 06-09-2004 à 14:27:09
Reply

Marsh Posté le 06-09-2004 à 14:37:47    

ha oué, en effet, avec le chdir ca marche :gratgrat:
 


---------------
Découvre le HFRcoin ✈ - smilies
Reply

Marsh Posté le 06-09-2004 à 16:39:40    

Sebastien a écrit :

Non mon explication est pas bizarre.


 
+1


---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
Reply

Sujets relatifs:

Leave a Replay

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