Franz Schuster: Dateien in einem Verzeichnis auslesen

Hallo.

Ich hätte mal eine frage, und zwar:

Ist es irgendwie möglich, alle in einem Verzeichnis liegenden Dateien, in diesem Fall lauter Fotos automatisch in einer PHP-Datei aufzulisten?

Es ist folgendermaßen: Jeder USer kann sich Bilder hochladen. Soviel er will. Und die werden für jeden User in ein bestimmtes Verzeicnis geladen. Und da ich aus Sicherheitsgründen kein directory-Listing anschalten kann, suche ich eine Möglichkeit, die Fotos aufzulisten.

Herauskommen soll also eine Datei, die bei jede Aufruf den kompletten Ordnerinhalt eines Verzeichnisses anzeigt. Ob nun die Bilder direkt in diese Datei eingebunden werden, oder nur Links mit Beschreibung oder nur Links mit Bildnamen bestehen ist egal. ICh brauche jedenfalls unbedingt so eine Datei, die mir den Inhalt des Verzeichnisses auflistet.

Und nochwas: (Auch wichtig): Immer wenn Bilder hochgeladen weden, haben sie CHMOD 600, kann ich das nicht so machen, dass das auf 755 geändert wird, automatisch??

In Hinsicht auf baldige Antwort freue und bedanke ich mich recht Herzlich.

Franz Schuster

  1. Servus,

    Ist es irgendwie möglich, alle in einem Verzeichnis liegenden Dateien, in diesem Fall lauter Fotos automatisch in einer PHP-Datei aufzulisten?

    Ja klar, eine leichte Übung für PHP :-)

    opendir() http://de3.php.net/manual/de/function.opendir.php
    öffnet Dir ein Verzeichnishandle

    readdir() http://de3.php.net/manual/de/function.readdir.php
    damit kannst Du alle Dateien in einem Verzeichnis mit einer Schleife auslesen.

    chmod() http://de3.php.net/manual/de/function.chmod.php
    Damit kannst Du die rwx-Rechte einer Datei/Verzeichnis ändern.

    Es ist folgendermaßen: Jeder USer kann sich Bilder hochladen. Soviel er will. Und die werden für jeden User in ein bestimmtes Verzeicnis geladen. Und da ich aus Sicherheitsgründen kein directory-Listing anschalten kann, suche ich eine Möglichkeit, die Fotos aufzulisten.

    Beachte die Sicherheitsrisiken wenn Du Usern erlaubst eigene Dateien auf Dein System zu laden. Checke auf jeden Fall ob es sich auch um eine Bilddatei in einer best. Grösse handelt. Das kannst Du z.B. über die Dateiendung, den MIME-Typ erledigen. Ausserdem solltest Du die Dateigrösse in Deiner php.ini begrenzen.

    Herauskommen soll also eine Datei, die bei jede Aufruf den kompletten Ordnerinhalt eines Verzeichnisses anzeigt. Ob nun die Bilder direkt in diese Datei eingebunden werden, oder nur Links mit Beschreibung oder nur Links mit Bildnamen bestehen ist egal.

    Die Darstellung ist dann in der Tat nur noch ein Kinderspiel...

    Und nochwas: (Auch wichtig): Immer wenn Bilder hochgeladen weden, haben sie CHMOD 600, kann ich das nicht so machen, dass das auf 755 geändert wird, automatisch??

    Siehe chmod(), aber ist das wirklich nötig? 0600 heisst doch glaub ich Lese- und Schreibrechte für den Erzeuger, also IMHO den php-Prozess der die Bilder reinstellt?

    Viel Spass beim erstellen des Scripts
    & Gruss AndreD

    1. Es ist folgendermaßen: Jeder USer kann sich Bilder hochladen. Soviel er will. Und die werden für jeden User in ein bestimmtes Verzeicnis geladen. Und da ich aus Sicherheitsgründen kein directory-Listing anschalten kann, suche ich eine Möglichkeit, die Fotos aufzulisten.
      Beachte die Sicherheitsrisiken wenn Du Usern erlaubst eigene Dateien auf Dein System zu laden. Checke auf jeden Fall ob es sich auch um eine Bilddatei in einer best. Grösse handelt. Das kannst Du z.B. über die Dateiendung, den MIME-Typ erledigen. Ausserdem solltest Du die Dateigrösse in Deiner php.ini begrenzen.

      Das Formular überprüft automatisch, ob es eine Bilddatei ist. Sie muss kleiner sein als 500kb und JPG, GIF TIFF oder PNG -  Format haben, das ist schon geregelt. Und es ist eine feste Benutzergruppe, die Daten hochladen kann, alles Arbeitskollegen.

      Siehe chmod(), aber ist das wirklich nötig? 600 heisst doch glaub ich Lese- und Schreibrechte für den Erzeuger, also IMHO den php-Prozess der die Bilder reinstellt?

      600 ja, aber die Bilder sollen ja von jedem angesehen werden können.

      Danke für ihre Hilfe.

      Franz Schuster.

      1. Hey, du Franz ! Wieso hast du meine Emailadresse da reingeschreieben? Das ist MEINE !!!!!!!!!!!!!

        Cya. Nick.

    2. opendir() http://de3.php.net/manual/de/function.opendir.php
      öffnet Dir ein Verzeichnishandle

      Ok. Ich habe das jetzt mal probiert, aber wie kan ich nun alle aufgelisteten Dateien als Links definieren? Weiss das auch noch jemand?

      1. Hi Franz,

        Ok. Ich habe das jetzt mal probiert, aber wie kan ich nun alle aufgelisteten Dateien als Links definieren? Weiss das auch noch jemand?

        zum Beispiel so?

        define( "C_WEBSITE_URL", "http://" . $_SERVER["HTTP_HOST"] . "/" );
        define( "C_IMAGE_DIR", "images/" );

        $full_path = "";
        $count = count( $all_files );

        for( $i = 0, $i <= $count, $i++ )
        {
          $full_path = C_WEBSITE_URL . C_IMAGE_DIR . $all_files[$i];

        echo( "<a href="" . $full_path . ""><img src="" . $full_path . "" alt="Bild Nr. " . $i . "" /></a>" );
        }

        Ist ungetestet und nur mal eine Idee, sollte aber so ähnlich funktionieren. Dein Pfad für die Bilder kann nat. auch relativ sein, ich finde eine absolute aber eigentlich besser, da die eigentlich immer passt, egal von wo aus Du das Script startest.

        Fette Grüsse,
        AndreD

        1. Mein versuch:

          <?php
          $handle=opendir ('.');
          while (false !== ($file = readdir ($handle))) {

          define( "C_WEBSITE_URL", "http://www.meineurl.de" . "/" );
          define( "C_IMAGE_DIR", "bilder/" );

          $full_path = "";
          $count = count( $all_files );

          for($i=0; $i<=$count; $i++ )
          {
            $full_path = C_WEBSITE_URL . C_IMAGE_DIR . $all_files[$i];

          echo( "<a href="" . $full_path . ""><img src="" . $full_path . "" alt="Bild" /></a>" );
          }

          }
          closedir($handle);
          ?>

          Aber jetzt kommen nur die "ERSATZBILDER" also kleine Kästchen mit dem Linktext. Und der Link führt ins Bilderverzeichnis direkt, also einfach in das Vereichnis "http://www.meineurl.de/images"

          Was habe ich jetz falsch gemacht?

          1. Hello,

            Mein versuch:

            <?php

            $handle=opendir ($dir);
            $filelist = array();
            while ($filename = readdir ($handle))
            {
              if(is_file($dir."/".$filename))
              {
                $filelist[] = $filename;
              }
            }
            closedir($handle);

            define( "C_WEBSITE_URL", "http://www.meineurl.de" . "/" );
            define( "C_IMAGE_DIR", "bilder/" );

            foreach($filelist as $filename)
            {
              $full_path = C_WEBSITE_URL . C_IMAGE_DIR . $filename;
              echo( "<a href="" . $full_path . ""><img src="" . $full_path .
                    "" alt="Bild" /></a>" );
            }

            ?>

            Probier es mal so...

            Liebe Grüße aus http://www.braunschweig.de

            Tom

            --
            Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
            1. Hallo, also jetzt bekomme ich komischerweise die Fehlermeldung:

              Warning: readdir(): supplied argument is not a valid Directory resource in /home/www/web82/html/projekte/9c-pg/login/data/memberpics/Bernd/listdirneu.php on line 4

              Warning: closedir(): supplied argument is not a valid Directory resource in /home/www/web82/html/projekte/9c-pg/login/data/memberpics/Bernd/listdirneu.php on line 11

              Aber alles ist auf CHMODs 777

              Warum gehts jezt nicht mehr?