Ankündigung

Einklappen
Keine Ankündigung bisher.

Dateipfad "exploden" und Ordnerstruktur simulieren

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Dateipfad "exploden" und Ordnerstruktur simulieren

    Ich speichere den Speicherort von Dateien auf meinem Webserver in einer Datenbank ab. Selecte ich alle Files auf meinem Server und gebe mir das Ergebnis aus habe ich verständlicherweise eine recht unübersichtliche Ausgabe.

    Ich überlege jetzt den Pfad, welchen ich abgespeichert habe, in eine virtuelle Ordnerstruktur zu übersetzen. Um eine Sortierung und eine Verschachtelung ähnlich der Ordnerstruktur zu erreichen.

    Code:
    /florian/4ddd0832-04ae-4c34-950f-04f07fe8abc3/untitled folder 1/untitled folder 2/blue.png		
    /florian/4ddd0832-04ae-4c34-950f-04f07fe8abc3/untitled folder 1/untitled folder 5/back.png	
    /florian/4ddd0832-04ae-4c34-950f-04f07fe8abc3/untitled folder 1/book.png	
    /florian/4ddd0832-04ae-4c34-950f-04f07fe8abc3/untitled folder 3/blue.png	
    /florian/4ddd0832-04ae-4c34-950f-04f07fe8abc3/untitled folder 3/backend.png
    Idee wäre jetzt ... von einem Slash zum anderen Slash zu exploden, also den String zu teilen und gleiche Einträge wie zum Beispiel der Ordner "florian" zu gruppieren in der Ausgabe. Das ist nur sehr aufwändig ... zumal es sehr sehr viele Ordner und Files auf dem Speicher ... also in meinem Fall IN DER DATENBANK gibt.

    Fällt einem von euch vielleicht ein vergleichbarer Anwendungszweck ein wie man sowas lösen könnte ? hat jemand ne gute Idee ?

    Lieben Gruß, Flo


  • #2
    Hi,

    als Basis wären Nested Sets gut gewesen:

    http://www.klempert.de/nested_sets/

    Dein Beispiel kannst du z.B. mit einer rekursiven Funktion abarbeiten.

    mfg wolf29
    while (!asleep()) sheep++;

    Unterschätze nie jemanden der einen Schritt zurück geht! Er könnte Anlauf nehmen.

    Kommentar


    • #3
      AJAX Directory Listing

      z.B. http://gabrieleromanato.name/jquery-...ctory-listing/
      Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

      Kommentar


      • #4
        Danke für den input !

        Nestet Sets hört sich gut an ... beim schnellen Überfliegen ist mir folgendes ins Auge gesprungen ... da lese ich dann doch gleich mal weiter Danke !

        die Nested Sets können noch mehr als aus der Mengendarstellung ersichtlich ist, denn sie speichern auch die Reihenfolge der Knoten auf einer Ebene. Um dieses Prinzip in der Datenbank abzubilden, behilft sich das Modell mit einem einfachen System: Jedes Element des Baumes erhält zwei Werte - einen linken und einen rechten, die fortlaufend durch die gesamte Struktur bei jedem Schritt um eins erhöht werden.
        Also quasi ?
        Wert : 4ddd0832-04ae-4c34-950f-04f07fe8abc3
        left : /florian/
        right: /untitled folder 1

        fyi:
        Auf diesen Stand bin ich aktuell, ich lese den Pfad der Datei aus der Datenbank aus. Und picke mir die Elemente zwischen den Slashes heraus.
        PHP-Code:
        $dir $row["DIR"]; 
        PHP-Code:
        $output = array();

                                    
        $elemente explode('/'$dir);
                                    foreach (
        $elemente as $i => $element) {
                                        
        $output[] = sprintf(
                                                
        $element
                                        
        );
                                    } 
        Hier ein vorher / nachher Vergleich. (siehe Anhang)

        Jetzt würde ich versuchen die einzelnen Elemente/Ordner zu gruppieren und per url anzusprechen ... na das kann ja was werden.

        Aber jetzt beschäftige ich mich erstmal mit Nested Sets ... der Ansatz gefällt mir !
        Angehängte Dateien

        Kommentar


        • #5
          Möglich, dass ich es gerade nicht mehr checke, aber sind Nested Sets für Verzeichnisstrukturen nicht eher ungeeignet? Ein Vorteil von Nested Sets ist, dass alle Nachfahrenelemente eines Eintrags günstig ausgelesen werden können. Das ist aber bei Verzeichnisstrukturen nicht wirklich das, was erwünscht ist, oder? Da geht es doch mehr darum, nur die unmittelbaren Kindelemente eines Eintrags zu erhalten.

          Ich würde pro Eintrag den Namen (basename, nicht den kompletten Pfad) und das Elternelement (dessen ID) speichern. (Auf beide Spalten dann jeweils ein Index.)

          Warum aber überhaupt das Dateisystem in der Datenbank spiegeln? Schafft das nicht alle möglichen Arten von Synchronisationsproblemen?

          Kommentar


          • #6
            Nested Sets haben recht universelle Qualitäten. Aber der Aufbau ist kostspielig, weil man (im einfachsten Fall) immer die ganze Tabelle sperren muss, da ein einzelnes Insert irgendwo im Baum dann eine Menge an Elementen anpasst und das ganze noch möglichst atomar passieren muss).
            Standards - Best Practices - AwesomePHP - Guideline für WebApps

            Kommentar

            Lädt...
            X