Problem mit readdir()

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Problem mit readdir()

    Guten Abend,

    ich stehe vor einem, mir merkwürdig erscheinenden, Problem.
    Ich möchte alle Ordner eines, meinem Script untergeordneten, Verzeichnis auslesen.
    Hierzu wollte ich Opendir und Readdir nutzen, da ich so direkt zwischen Datei und Ordner unterscheiden kann. Jedoch lässt mich ReadDir ausschließlich das Verzeichnis auslesen in dem mein Script liegt. Unter- oder übergeordnete Verzeichnisse schmeißen zwar keine Fehlermeldung, geben aber auch keine Verzeichnisse aus.
    Das Merkwürdige an der Sache ist nun, dass ich mit ScanDir ohne Probleme auch unter- und übergeordnete Verzeichnisse auslesen kann. Also kann es doch eigentlich kein "Rechteproblem" sein, was das korrekte Auslesen mit ReadDir verhindert.
    Ich würde halt gerne aus besagtem Grund ReadDir statt ScanDir verwenden und bin über jede Antwort dankbar!

    Anbei der entsprechende Code.

    Code:
    //funktioniert nicht
    if ($handle = opendir('profiles/'))
     {
        while (false !== ($file = readdir($handle))) 
          {
            if ($file != "." && $file != ".." && is_dir($file)) {
                echo "$file <br />";
            }
        }
    	
        closedir($handle);
    }
    
    //funktioniert
    $myarr = scandir('profiles/');
    print_r($myarr);

    Viele Grüße,
    Raffi
    Last edited by raffiausgoslar; 30-06-2010, 00:09. Reason: [gelöst]

  • #2
    Originally posted by raffiausgoslar View Post
    Unter- oder übergeordnete Verzeichnisse schmeißen zwar keine Fehlermeldung,
    Natürlich nicht - dazu sind Funktionen wie is_dir ja da, um eben keine laute Meldung zu werfen, sondern einen leise auswertbaren Rückgabewert.
    geben aber auch keine Verzeichnisse aus.
    Natürlich, die Namen, die du zur Prüfung an is_dir übergibst, entsprechen ja auch keinem vorhandenen Verzeichnis - weil du es versäumt hast, auch noch den Pfad davor zu setzen.
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Comment


    • #3
      Originally posted by wahsaga View Post
      Natürlich nicht - dazu sind Funktionen wie is_dir ja da, um eben keine laute Meldung zu werfen, sondern einen leise auswertbaren Rückgabewert.
      Ok - $file ist vielleicht irreführend. Ich will Verzeichnisse zurückbekommen. Von daher ist eine überprüfung mit $file doch eigentlich valide?! Ansonsten könnte ich mir nicht erklären warum
      Code:
      if ($handle = opendir('.'))
       {
          while (false !== ($file = readdir($handle))) 
            {
              if ($file != "." && $file != ".." && is_dir($file)) {
                  echo "$file <br />";
              }
          }
      	
          closedir($handle);
      }
      ordentlich alle Ordner in dem Verzeichnis, in dem mein Script liegt, ausgiebt.



      Originally posted by wahsaga View Post
      Natürlich, die Namen, die du zur Prüfung an is_dir übergibst, entsprechen ja auch keinem vorhandenen Verzeichnis - weil du es versäumt hast, auch noch den Pfad davor zu setzen.
      Meinst du damit, ich soll absolute Pfade nutzen? Wenn ja - das habe ich schon probiert. Mit dem selben Erfolg. Für den Ordner in dem das Script liegt klappt es - für alle anderen nicht.

      Code:
      $mainpath = "/usr/www/users/netnbl/admin/";
      
      //Keine Ausgabe
      if ($handle = opendir('profiles/')) {
          while (false !== ($file = readdir($handle))) {
              if ($file != "." && $file != ".." && is_dir($mainpath.$file)) {
                  echo "$file <br />";
              }
          }
      	
          closedir($handle);
      
      
      //Keine Ausgabe
      if ($handle = opendir($mainpath.'profiles/')) {
          while (false !== ($file = readdir($handle))) {
              if ($file != "." && $file != ".." && is_dir($file)) {
                  echo "$file <br />";
              }
          }
      	
          closedir($handle);
      }
      
      //Keine Ausgabe
      if ($handle = opendir($mainpath.'profiles/')) {
          while (false !== ($file = readdir($handle))) {
                echo "$file <br />";
              
          }
      	
          closedir($handle);
      }

      Comment


      • #4
        PHP Code:
        foreach(glob('./dein/ordner/*',GLOB_ONLYDIR) as $dir)
        {
          echo 
        $dir '<br>';

        Wir werden alle sterben

        Comment


        • #5
          Hallo combie,

          dein Code funktioniert wunderbar. glob kannte ich bis eben noch gar nicht.

          Ein Dankeschön auch noch mal an wahsaga. Hatte wohl doch ein kleines Brett vorm Kopf. Nachdem ich verstanden hab, was du mit den Pfaden meintest läuft's auch mit ReadDir. Und damit die anderen, die diesen Fred vielleicht irgendwann mal ausgraben, auch noch was davon haben, gibt's anbei noch die "Lösung".

          Code:
          if ($handle = opendir('profiles/')) {
              while (false !== ($file = readdir($handle))) {
                  if ($file != "." && $file != ".." && is_dir('profiles/'.$file)) {
                      echo "$file <br />";
                  }
              }
          	
              closedir($handle);

          Comment

          Working...
          X