Errraddicator: is_dir funktioniert nicht richtig

Hidioho

Ich habe für meine Seite ein Script geschrieben was alle Dateien und Verzeichnisse in einem gegebene auflistet.

Bei mir auffer Arbeit klappt das wunderbar.
Lade ich die Datei auf den echten Server wo meine Seite liegt, klappts nicht.
Dort stellt er mir die Ordner als Dateien dar und nicht als Ordner.
Keine Ahnung warum das bei mir auffem lokalen Rechner klappt und auf dem echten nicht.

Hier mal der Quellcode:
[PHP]
   <!-- ... -->
   <?php
      /*-- this function prints the given directory --*/
      function listDirectory($dir, $caption)
      {
        echo "<h2>$caption</h2>\r\n";
        echo "<ul>\r\n";

/*-- print all files --*/
        while($direntry = $dir->read() )
        {
          if($direntry != "." && $direntry != "..")
          {
            /*-- check if current entry is a file --*/
            $entrypath = $dir->path . "\" . $direntry;
            $isdir = is_dir($entrypath);
            if(!$isdir)
            {
              echo "<li><a href="$entrypath">$direntry</a></li>\r\n";
            }
          }
        }

/*-- rewin directory --*/
        $dir->rewind();

/*-- print all subdirectories --*/
        while($direntry = $dir->read() )
        {
          if($direntry != "." && $direntry != "..")
          {
            /*-- check if current entry is a dir or file --*/
            $entrypath = $dir->path . "\" . $direntry;
            $isdir = is_dir($entrypath);
            if($isdir)
            {
              $subdir = dir($entrypath);
              listDirectory($subdir, $direntry);
            }
          }
        }

echo "</ul>\r\n";
        $dir->close();

return 0;
      }

/*-- open & list data-directory --*/
      $datapath = "data";
      $datadir = dir($datapath);
      listDirectory($datadir, "");
    ?>
    <!-- ... -->
[/PHP]

Weiß einer von Euch was falsch läuft?

Danke im voraus

Patrick

  1. Hello,

    while($direntry = $dir->read() )

    Das ist schonmal falsch.
    Eine Datei namens '0' würde die Schleife vorzeitig beenden.

    while(($direntry = $dir->read())!== false )

    ist besser.

    {
              if($direntry != "." && $direntry != "..")

    Und hier kann man gleich fragen

    if(is_file($direntry) or is_link($direntry))

    {
                /*-- check if current entry is a file --*/
                $entrypath = $dir->path . "\" . $direntry;

    Auch unter Windows musst Du hier in PHP '/' als Verzeichnistrenner verwenden

    Harzliche Grüße vom Berg
    http://www.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau

    1. Hello,

      while($direntry = $dir->read() )

      Das ist schonmal falsch.
      Eine Datei namens '0' würde die Schleife vorzeitig beenden.

      while(($direntry = $dir->read())!== false )

      ist besser.

      Ist nich "0" das gleiche wie false?

      /*-- check if current entry is a file --*/
                  $entrypath = $dir->path . "\" . $direntry;

      Auch unter Windows musst Du hier in PHP '/' als Verzeichnistrenner verwenden

      *LOL* @ Fehler.
      Boah wie schlecht von mir.
      Aber in Flüchtigskeitsfehlern war ich schon immer der Größte *ROFL*

      Harzliche Grüße vom Berg
      http://www.annerschbarrich.de

      Tom

      Danke noch mal ;)

      1. hi,

        Ist nich "0" das gleiche wie false?

        Für PHP ist es das "gleiche", aber nicht das selbe.

        Und eben deshalb sagte Tom dir ja,

        Eine Datei namens '0' würde die Schleife vorzeitig beenden.

        Und durch den Vergleich auch auf _Typengleicheit_ verhindert du, dass dein Script hier im Zweifelsfalle zu früh beendet wird.

        gruß,
        wahsaga

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }
        1. Hello,

          Für PHP ist es das "gleiche", aber nicht das selbe.

          Das Gleiche aber nicht dasselbe.

          *scnr*

          Harzliche Grüße vom Berg
          http://www.annerschbarrich.de

          Tom

          --
          Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
          Nur selber lernen macht schlau

      2. Hello,

        while($direntry = $dir->read() )

        Das ist schonmal falsch.
        Eine Datei namens '0' würde die Schleife vorzeitig beenden.

        while(($direntry = $dir->read())!== false )

        ist besser.

        Ist nich "0" das gleiche wie false?

        Nein. Seit PHP 4 nicht mehr.
        Da wurden die Identitätsoperatoren eingeführt
        http://de3.php.net/manual/de/language.operators.comparison.php

        Harzliche Grüße vom Berg
        http://www.annerschbarrich.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        Nur selber lernen macht schlau