Sven Rautenberg: Unterordner durchsuchen und alles in EINEM Array setzen

Beitrag lesen

Moin!

class MyRecursiveFilterIterator extends RecursiveFilterIterator {

public static $FILTERS = array(
        '.jpg','.png','.gif'
    );

public function accept() {
        return !in_array(
            $this->current()->getFilename(),
            self::$FILTERS,
            true
        );
    }

}

  
Ich hatte schon etwas bewußt das Beispiel von PHP.net nicht 1:1 kopiert, sondern abgewandelt auf "einfache Erweiterbarkeit".  
  
Dieser Filter dort oben schaut, ob der aktuelle Dateiname aufgelistet in dem Array drinsteht. Dort sind die Dateinamen ".jpg", ".png" und ".gif" aufgeführt, und sicherlich heißt keine einzige Datei bei dir so.  
  
Nein, du musst an den Dateinamen von getFilename() schon mit Stringfunktionen ran und vergleichen, ob das Ende des Dateinamens mit einer der gewünschten Endungen übereinstimmt. Und das entwickelt man am besten erstmal ganz normal und schrittweise, nämlich als ersten Schritt mal für nur eine Dateiendung, damit alle auftretenden Probleme wirklich nur mit dem Finden dieser einen Endung zu tun haben, und nicht vielleicht mit irgendwas anderem.  
  
PHP hat zum Glück noch einige Funktionen, die das Parsen von Dateinamen einfacher machen. [pathinfo()](http://de3.php.net/manual/de/function.pathinfo.php) passt z.B.  
  
Wenn du dann also deine erste Extension korrekt findest, fügst du die zweite Extension hinzu und checkst, ob das auch funktioniert. Und dann die dritte. Und idealerweise hast du ein kleines Testverzeichnis zum Prüfen, in dem sich eine dir bekannte, hinreichend kleine Anzahl von Dateien befindet, damit du nicht riesige Ergebnislisten erhältst, sondern was überschaubares.  
  

> ich möchte dann links machen  
> ~~~php

<a href="unterordner/bild1.jpg">BILD1</a>  

> <a href="unterordner/bild2.jpg">BILD2</a>  
> <a href="unterordner1/unterordner2/bild3.jpg">BILD3</a>

so in etwa, kannst du mir helfen ich bin verzweifelt und brauche eine Lösung :'(

Wenn dein Iterator-Filter erstmal die Dateien korrekt ausspuckt, ist das Link-Erstellen fast kein Problem mehr. Allerdings: In dem Dateipfad steckt das gesamte Verzeichnis auf der Festplatte drin, der Pfad für die Links ist aber im URL-Bereich und deshalb kürzer. Da musst du also "nur noch" den Pfad vorne korrekt kürzen. Ich würde auch immer absolute Pfade ausgeben lassen, beginnend mit einem "/", weil das die Ausgabe unabhängig macht von der tatsächlichen Position der Ausgabe des Links - du kannst die Funktion dann unabhängig davon benutzen, wo die Seite sich befinden, in der die Bilder ausgegeben werden.

- Sven Rautenberg