Problem mit readdir()

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • 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
    Zuletzt geändert von raffiausgoslar; 30.06.2010, 01:09. Grund: [gelöst]

  • #2
    Zitat von raffiausgoslar Beitrag anzeigen
    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.

    Kommentar


    • #3
      Zitat von wahsaga Beitrag anzeigen
      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.



      Zitat von wahsaga Beitrag anzeigen
      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);
      }

      Kommentar


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

        Wir werden alle sterben

        Kommentar


        • #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);

          Kommentar

          Lädt...
          X