Canti: Ausgelesene Ordner anordnen auf der Webseite (Ohne Datenbank)

Hallo,

Ich habe da mal eine frage.

Und zwar lese ich mit PHP Ordner auf meinem Webspace aus.

Jetzt würde ich gerne wissen welche möglichkeiten es gibt, diese Ordner anzuordnen.

Im moment habe ich keine maßnahmen ergriffen um die Ordnung zu manipulieren, ich habe lediglich eine schleife die die Ordner namen ausließt und anzeigt.
Das ergebsniss ist etwas merkwürdig, zumindest erkenne ich keine Ordnung hinter der automatischen anordnung.

Naja, jedenfalls würde es mich interessieren was ich alles machen könnte um diese Ordner anders anzuordnen (nach Datum, neustes zuerst)
Und das OHNE datenbank.

Geht sowas überhaupt? oder ist da bestenfalls nur die Alphabetische ordnung drin?

Bin für jede Idee dankbar :-)

  1. Hi,

    Im moment habe ich keine maßnahmen ergriffen um die Ordnung zu manipulieren, ich habe lediglich eine schleife die die Ordner namen ausließt und anzeigt.
    Das ergebsniss ist etwas merkwürdig, zumindest erkenne ich keine Ordnung hinter der automatischen anordnung.

    Es gibt keine.
    Die Ordnernamen werden dir in der Reihenfolge geliefert, in der das Betriebssystem sie zurueckgibt. Und das ist oftmals bspw. in der Reihenfolge, in der die einzelnen Eintraege im Verzeichnis auf der Festplatte vorliegen. Wird ein Ordner "zwischendrin" geloescht, nimmt der naechste neue seine "Position", o.s.ae.

    Naja, jedenfalls würde es mich interessieren was ich alles machen könnte um diese Ordner anders anzuordnen (nach Datum, neustes zuerst)

    Packe die Ordnernamen und die Informationen, die du sonst noch fuer die Sortierung brauchst, zunaechst in ein Array. (Ueberlege dir dafuer eine geeignete Datenstruktur.)
    Sortiere dieses anschliessend vor der Ausgabe mittels usort nach dem gewuenschten Kriterium.

    MfG ChrisB

    1. Danke erstmal.

      Das ist natürlich schade. Die Benutzung des Arrays setzt aber vorraus das ich vorher alle Namen festlege und eintrage. Also immer wenn ich einen Neuen ordner hochlade, müsste ich in dem Array dann eintragen an welcher stelle er stehen soll wenn ich das richtig verstanden habe.

      Das Problem ist, das ich das ganze möglichst autonom haben will.
      Immer wenn ich einen Neuen ordner hochlade soll er in der liste ganz oben erscheinen, ohne das ich zusätzlich etwas machen muss.

      Eigentlich wird ja auch das Änderungsdatum eines Ordner gespeichert, kann ich das nicht mit PHP auslesen?

      1. Hello,

        Das ist natürlich schade. Die Benutzung des Arrays setzt aber vorraus das ich vorher alle Namen festlege und eintrage. Also immer wenn ich einen Neuen ordner hochlade, müsste ich in dem Array dann eintragen an welcher stelle er stehen soll wenn ich das richtig verstanden habe.

        Nein, Du musst ohnehin vor jeder Anzeige neu abfragen, denn eigentlich befindest Du Dich doch in einer Multiuser-Umgebung, in der von einer Abfrage zur nächsten viel passiert sein könnte.

        Schau Dir auch mal die Funktion glob() an. http://de3.php.net/manual/en/function.glob.php
        Ich habe hier auch mal eine rekursionssichere Verzeichnisabfrage gepostet. Schau bitte im Archiv.

        Daran solltest Du nämlich dneken, wenn sich auf Deinem System auch symbolische Links auf Verzeichnisse befinden können. Die könnten nämlich wieder auf eine oder mehrere Etagen höher verweisen und dann durchläufst Du den Baum bis in alle Ewigkeit im Kreis.

        Liebe Grüße

        Tom vom Berg

        --
        Nur selber lernen macht schlau
        1. Danke, glob() klint ja sehr interesannt, aber ich finde da keine funktion mit der ich das erstellungsdatum eines ordners auslesen kann.

          Und ohne das, oder Speziellen Markierungen am ordner gibt es eigentlich keine möglichkeit eine sortierung nach Datum durchzuführen

          Kann ich vieleicht bei einem Ordner namens "001 Test" die erstsen 4 zeichen wegscheinden?

          So das er Alphanummerisch ordnet, und bei der ausgabe dann einfach die Zahlen nicht mit ausgibt?

          1. Hello,

            Danke, glob() klint ja sehr interesannt, aber ich finde da keine funktion mit der ich das erstellungsdatum eines ordners auslesen kann.

            Das musst Du dir extra beschaffen über die weiteren Directory- bzw. Filefunktionen.

            http://de3.php.net/manual/en/function.filemtime.php
            oder
            http://de3.php.net/manual/en/function.filectime.php

            Unter Unix gibt es keine Erstellungszeit in der File Information.

            Siehe auch noch http://de3.php.net/manual/en/function.stat.php
            Das liefert Dir gleich mehrere Metadaten auf einmal, sit aber mWn sehr teuer. Man sollte es daher nur benutzen, wenn man die Informationen wirklich benötigt.

            $_myfiles['path']  = array();
            $_myfiles['ctime'] = array();

            $_myfiles['path'] = glob($path);

            foreach($_myfiles['path'] as $key => $path)
            {
              $_myfiles['ctime'][$key] = filectime($path);
            }

            Nun hast Du zwei korrespondierende Arrays, die Du wahlweie oder auch beide sortieren kannst.
            Danach kannst Du sortiert ausgeben.

            echo "<table>\n";

            foreach($_myfiles['ctime'] as $key => $time)
            {
              echo "    <tr>\n";
              echo "        <td>".htmlspecialchars($_myfiles['path'][$key])."</td>\n";
              echo "        <td>".date('Y-m-d H:i:s,$time)."</td>\n";
              echo "    </tr>\n";
            }

            echo "</table>\n";

            Das geht natürlich auch mit drei oder vier korrespiondierenden Arrays.
            Ggf. musst Du darauf achten, ob der angesprochene $key auch vorhanden ist im angesprochenen Array, dann können die sogar Lücken haben. "Leitarray" ist dann immer das, nachdem man die äußere foreach-Schleife aufbaut.

            Liebe Grüße

            Tom vom Berg

            --
            Nur selber lernen macht schlau