kostenloser Webspace werbefrei: lima-city


opendir() und readdir()

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    t*********a

    Hi,
    ich versuche mit opendir() und readdir() ein Verzeichnis auszulesen.
    Das klappt auch soweit ganz gut, solange ich bei opendir() als Parameter "." übergebe. Meine Nachforschungen im Internet haben ergeben, dass ich eigentlich auch ein mehr oder weniger beliebiges Verzeichnis mit opendir() öffnen kann, dafür müsste ich als Parameter "beispiel_dir" bzw. "beispiel_dir/" angeben. Es funktioniert aber nicht. Weder bei mir auf meinem localhost (Wamp5), noch auf LimaCity. Ich habe auch schon probiert, den Pfad komplett anzugeben, sowohl vom "www"-Verzeichnis aus, als auch vom "richtigen" Pfad aus, also C:/www (oder wo das Verzeichnis auch immer abgelegt ist). Genauso wenig funktioniert "/beispiel_dir/".
    Tja, jetzt bin ich irgendwie mal wieder am Ende:confused:...
    Habt ihr eine Idee?
    Gruß


    Beitrag geändert: 9.10.2008 15:15:22 von tel08a-bama
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Wahrscheinlich bekommst du folgende Fehlermeldung (und die sollte dir eigentlich schon alles sagen):
    opendir(): failed do open directory "beispiel_dir". No such directory in irgendeineDatei.php in line Zeile

    Ich behaupte mal, du öffnest wirklich den Ordner beispiel_dir, der auf dem Dateisystem nicht existiert.
    Bevor du einen Ordner öffnen kannst, musst du ihn logischer Weise erstellen. Das geht mit mkdir().
    allgemein kannst du mit readdir auf jedes Verzeichnis auf deinem Server zugreifen. Es muss nur existieren.
  4. b*****m

    versuch mal den aktuellen Ordner zu öffnen, indem du als Parameter nurn . (einen Punkt) eingibst, wenn das auch nicht geht, dann ist was falsch, denn der Ordner in dem Das Script liegt muss ja existieren.
  5. Autor dieses Themas

    t*********a

    Hi,
    sorry wenn ich das so sage, aber ihr lest meine Fragestellung nicht richtig.
    Ich habe schon gesagt, dass es funktioniert mit dem Punkt, also
    opendir(".")
    .
    Und ich habe gesagt ich möchte ein Verzeichnis auslesen, nichts anlegen. So blöd bin ich auch nicht, das ich versuche, ein Verzeichnis zu öffnen, was es nicht gibt.



    Beitrag geändert: 9.10.2008 16:24:47 von tel08a-bama
  6. sandrock-jonas

    Kostenloser Webspace von sandrock-jonas

    sandrock-jonas hat kostenlosen Webspace.

    Am besten, du postest mal deinen Code (und deine Fehlermeldung, falls du eine bekommst), dann können dir am besten helfen. Entweder ist im Code ein Fehler oder du hast keinen Lesezugriff auf das Verzeichnis, das du lesen willst (wobei mich das aber sowohl bei einer "normal" eingerichteten Windows-Testumgebung als auch bei Lima-City wundern würde).


    Beitrag geändert: 9.10.2008 17:30:50 von sandrock-jonas
  7. Autor dieses Themas

    t*********a

    Also hier der Code:
    // Anzeigen der Ordnerliste außer $list_ignore:
    $files = array();
    $list_ignore = array ('.', '..', 'index.php','dossier.gif','logo.jpg', 'file.png');
    // "." funktioniert, ein anderer Ordner nicht!!!
    $path = ".";
    						
    if ($handle = opendir($path))
    {
       $msg = 'No directorys yet.<br />To create a new one, just create a directory in \'www\'.';
       
       // Ordnerliste in $files                     	
       while ($file = readdir($handle))
       {
          // Ich möchte auch in den übergeordneten Ordner springen können, deswegen auch ".."
          if (is_dir($file) && !in_array($file,$list_ignore) || $file == '..')
          {    
             $msg = '';
             $files[]=$file;
          }
       }
       closedir($handle);
    
       // Funktion für usort ()							
       function cmp($a, $b)
       {
          return strcmp($a, $b);
       }
    
       // Sortieren der Ordnernamen von A-Z
       usort($files, "cmp");
    
       // Ausgabe der Ordner als Link
       for ($i = 0; $i < sizeof ($files); $i++)
       {
          echo '<a class="ditem" href="'.$files[$i].'"><img src="http://www.tel08a-bama.lima-city.de/dossier.gif" alt="image dossier" /> ';
          if ($files[$i] == '..') echo 'Parent Directory';
          else echo $files[$i];
          echo '</a>';
       }
    
       // Hier sollen nach den Ordnern die Dateien ausgegeben werden				
       if ($dir = @opendir($path))
       {
          $files = NULL;
          $files = array();
          while ($file = readdir($dir))
          {
             if (!is_dir ($file) && !in_array($file,$list_ignore))
             {
                $files[]=$file;
             }
          }
          closedir ($dir);
    								
          usort($files, "cmp");
    								
          for ($i = 0; $i < sizeof ($files); $i++)
          {
             echo '<a class="ditem" href="'.$files[$i].'"><img src="http://www.tel08a-bama.lima-city.de/file.png" alt="image dossier" /> '.$files[$i].'</a>';
          }
       }
    }
    else $msg = 'Cannot open directory!';
    						
    echo $msg;
  8. Aber was bekommst du als Fehlermeldung??
    Kommt überhaupt eine??
    kann es sein, dass das Verzeichnis leer ist??
  9. Autor dieses Themas

    t*********a

    Nein, das Verzeichnis ist nicht leer und es kommt auch keine Fehlermeldung.
  10. sandrock-jonas

    Kostenloser Webspace von sandrock-jonas

    sandrock-jonas hat kostenlosen Webspace.

    <?php
    if (is_dir($file) && !in_array($file,$list_ignore) || $file == '..')
    ?>

    was willst du mit dieser Zeile bezwecken? Ich vermute, hier liegt der Fehler:

    1. is_dir($file) überprüft, ob $file ein Verzeichnis ist. Somit bekommst du höchstens die Verzeichnisse.
    2. Bekommst du die Verzeichnisse aber nicht, weil die Funktion is_dir($file) das Verzeichnis $file im Ordner '.' sucht. Es müsste: is_dir($path.'/'.$file) heißen (mit oder ohne '/', je nach dem, ob du den Slash schon in $path hast).
    3. Was soll der Interpreter zuerst auswerten? Das && oder das ||? -> unklar, entweder verschachtelte if()s benutzen, 4. beachten oder Klammern (bin mir aber nicht sicher, ob das mit der Klammerung auch bei if() funktioniert)!
    4. !in_array($file,$list_ignore) || $file == '..' -> kannst du dir sparen, indem du den Eintrag '..' aus $list_ignore 'raus nimmst.

    Damit ergibt sich für die if()-Bedingung:

    <?php
    if (is_dir($path.'/'.$file) && !in_array($file,$list_ignore))
    ?>
  11. Autor dieses Themas

    t*********a

    Stimmt, wenn ich $list_ignore verändere, kann ich meine if-Anweisung verändern.
    Das habe ich gemacht. Es wird nun anstatt aller Ordner nur das '..' ausgegeben.

    Was meinst du mit ich müsste $path verwenden? Wenn ich einfach nur
    isdir("beispiel_dir")
    angebe, sucht die Funktion mir den Ordner beispiel_dir im Verzeichnis, wo meine .php abgelegt ist, das, dass ich über
    isdir(".")
    anspreche. Oder nicht? Das will ich auch bezwecken, der Ordner liegt in meinem aktuellen Verzeichnis.

    Was ich damit überhaupt bewzecken will?
    Ich will eine Ordnerliste ausgeben (mit folgender Dateiliste, nicht gemischt) und wenn ich auf einen Ordner klicke, soll der Inhalt dieses Ordners ausgegeben werden.
    Für die erste Ordnerliste kann ich als Pfad $path="." verwenden, aber dann muss ich ja den Namen des "geklickten" Ordners als Pfad setzen. Wenn ich einfach den Namen als Pfad angebe, $path="beispiel_dir", dann sucht er ja den Ordner in meinem Verzeichnis, das ich mit "." anspreche, oder nicht?


    Ich habs gelöst...
    irgendwie liegts, wie mir schon angeraten, an der Funktion isdir(), ich habe mir jetzt einfach selber eine geschrieben und jetzt funktionierts problemlos.
    Nochmal danke für alle Anregungen!!

    Beitrag geändert: 10.10.2008 10:45:55 von tel08a-bama
  12. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!