yannis: Dir auslesen.

Hallo,
ich möchte ein verzeichniss auslesen und dann die unterverzeichnisse anzeigen:

while ($subdir = readdir($fp)){
    if (is_dir($subdir)&&$subdir!="."&&$subdir!=".."){
        echo "<td class="std"><b><a href="$PHP_SELF?seite=$seite&PHPSESSID=$PHPSESSID&sub=$subdir">$subdir</a></td>";
    }
}

Problem: Er zeigt das erste Verzeichniss richtig an, andere aber nicht. Porque?

Danke für hilfe,
y

  1. Hello,

    <?php   ### dirlist.php ###

    Funktion zur Erzeugung einer Directoryliste
    irgendwas ist hier buggy.

    //----------------------------------------------------

    function get_dirlist($dir)
    {
      $dirlist=array();

    $dh=opendir($dir);
      if ($dh)
      {
        while ($filename=readdir($dh))
        {
          if (!is_file($filename) and !is_dir($filename))
          {
            $dirlist[]=$filename;
          }
        }
        closedir($dh);
      }
      else
      {
        // ggf. Fehlermeldung setzen
        return false;
      }

    asort($dirlist);
      return $dirlist;
    }
    //-----------------------------------------------------

    $dir = get_dirlist("..");

    echo "<pre>";
    print_r($dir);
    echo "</pre>";

    ?>

    liebe Profis, schaut euch doch bite mal diese Funktion an, die da eben zusammengekotzt habe. DIE liefert tatsächlich die Unterverzeichnisse des angegebenen Verzeichnisses.

    Da stimmt doch irgend was nicht?

    PHP-Version PHP Version 4.3.1 auf Redhat Linux Ver ??

    Grüße

    Tom

    1. Hello,

      habe den Fehler gefunden.
      Man muss natürlich bei is_dir($dir."/".$filename) auch im passenden Verzeichnis nachschauen. *grummel*

      Und hier nun noch die gewünschte rekursive Funktion für get_tree() und die reparierte für get_subdirs()

      <?php   ### dirlist.php ###

      Funktionen zur Erzeugung einer Directoryliste

      //----------------------------------------------------
      function get_subdirs($dir)
      {
        $dirlist=array();

      $dh=@opendir($dir);
        if ($dh)
        {
          while ($filename=readdir($dh))
          {
            if (is_dir($dir."/".$filename) and ($filename !=".") and ($filename !=".."))
            {
              $dirlist[]=$filename;
            }
          }
          closedir($dh);
        }
        else
        {
          // ggf. Fehlermeldung setzen
          return false;
        }

      asort($dirlist);
        return $dirlist;
      }
      //-----------------------------------------------------
      function get_tree($dir)
      {
        $dirlist=array();

      $dh=@opendir($dir);
        if ($dh)
        {
          while ($filename=readdir($dh))
          {
            if (is_dir($dir."/".$filename) and ($filename !=".") and ($filename !=".."))
            {
              $dirlist[$filename]= get_tree($dir."/".$filename);
            }
            elseif(is_file($dir."/".$filename))
            {
              $dirlist[]=$filename;
            }
          }
          closedir($dh);
        }
        else
        {
          // ggf. Fehlermeldung setzen
          return false;
        }

      asort($dirlist);
        return $dirlist;
      }
      //======================================================

      $tree = get_tree("..");

      echo "<pre>";
      print_r($tree);
      echo "</pre>";

      ?>

      Grüße

      Tom