Bilder vom Server laden und auf der Homepage anzeigen

  • Guten Abend,


    ich habe hier vor kurzem (finde ich leider nicht mehr) gelesen, das die gewünschten Bilder von einem Ordner der auf dem Server liegt

    automatisch auslesen kann und die werden auf der Seite angezeigt.

    Allerdings kenne ich die Funktion nicht.


    Kann mir einer weiterhelfen?


    Beste Grüße

  • So, ich habe wieder Zeit gefunden um ein wenig zu fummeln und brauche eure Hilfe :)


    Code
    if ($bild != "." && $bild != ".." && $bild != "%IMG%" && $bild != "_notes" && $bildinfo['basename'] != "Thumbs.db") {

    Die if Anwendung dient dafür Dateien auszuschließen, jetzt möchte ich das bestimmte Dateien ausgeschloßen werden, z.B.:

    alle Dateien die IMG enthalten.


    1234_IMG.jpg oder IMG-456 etc

    Gibt es hierfür ein Joker? :)


    Vielen Dank.

  • Zur Frage nach den Unterverzeichnissen: Da gibt es mehrere Möglichkeiten:

    1. Mit glob von Hand ausarbeiten:

    2. Iteratoren verwenden:

  • Zur ersten Frage: Dieses: $bild != "." && $bild != ".." brauchst Du nicht, wenn Du glob verwendest. Und um auf einen Teilstring zu prüfen eignet sich strstr:

    if (!strstr($bild, 'IMG'))

    Vielen Dank dafür, das hat schon mal gut geklappt :)

    Wie kann ich mehreres ausschließen?

    z.B. IMG und gr


    Habe schon paar Varianten probiert aber ohne Erfolg :)


    Vielen Dank.

  • Ich bin jetzt überfordert ^^


    Mein Quellcode:



    Ich habe das Gefühl das dein Code und mein Code nicht miteinander arbeiten wollen ^^

  • Wenn es darum geht, mehrere Teilstrings auszuschließen, kannst Du die Abfragen einfach verketten:

    if (!strstr($bild, 'IMG')&& !strstr($bild, 'substr2')&& !strstr($bild, 'substr3')) {


    Außerdem hast Du es dir unnötig schwer gemacht: scandir liefert bereits den vollständigen Pfad, für das HTML kannst Du diesen direkt verwenden:

    PHP
        <li>
            <a href="<?php echo $bild;?>">
            <img src="<?php echo $bild;?>" width="140"
                    alt="Bildergalerie Katzen" /></a>
        </li>

    Dann bleiben noch die Dateien "." und ".." übrig, wenn Du glob statt scandir verwendest, brauchst Du diese nicht extra auszublenden, ebenso evtl. andere, die keine Bilddateien sind.

  • Da das hier sicherlich wieder überlesen wird, kann ich ja ruhig anmerken, dass ihr da viel unnütze Logik einbaut.

    Der Grund dafür ist schlicht und ergreifend, dass der Charmin die SPL Iteratoren nicht sofort verstanden hat. Das meine ich nicht mal bewertend, aber man sollte sich gerade für solche Fälle intensiv damit befassen, denn der bereits erwähnte RecursivRegexIterator aus #8 macht so gut wie alle von euch berücksichtigten IF-Konstrukte überflüssig.


    Aber ich will euren Tatendrang nicht weiter stören, es scheint ja mal wieder nur einen Weg zu geben...

  • Arne Drews

    Das ich hiervon keine Ahnung habe, hast du schon mal vollkommen recht ^^


    Würdest du mir hier helfen, den RecursivRegexiterator einzubauen?

    Ich brauche das im Prinzip nur für die eine Seite und habe dein Link oben schon gelesen,

    verstehe das ganze aber nicht da ich mich aktuell mit HTML und CSS erstmal intensiv beschäftigen muss :)


    Vielen Dank erstmal für bisher eure Hilfe.

  • Hi,


    Das grundsätzliche Prinzip, Verzeichnisse rekursiv mit den SPL Iteratoren auszulesen, findest Du hier beschrieben: https://www.php-rocks.de/thema…terieren-mit-der-spl.html

    Ist im Prinzip dasselbe, was hier schon kurz gezeigt wurde, aber etwas ausführlicher und relativ einfach verständlich erklärt.


    Wenn Du das soweit in Dein Projekt eingebaut hast, kann man das ganze mit nahezu wenig Aufwand mit dem RecursiveRegexIterator erweitern.

    Aber ich würde sagen, wenn Du es wirklich willst, mache es Step by Step und setze erstmal das grundsätzlich Auslesen der Verzeichnisse mit den Iteratoren um. Wenn das läuft, können wir Dir helfen, wie Du da den RecursiveRegexIterator einhängst.


    EDIT: Mal als kleine allgemeine Anregung

    PHP: Standard
    $itrDirectory = new RecursiveDirectoryIterator( 'images' );
    $itrIterator = new RecursiveIteratorIterator( $itrDirectory, RecursiveIteratorIterator::SELF_FIRST );
    PHP: mit RecursiveRegexIterator
    $itrDirectory = new RecursiveDirectoryIterator( 'images' );
    $itrIterator = new RecursiveRegexIterator( $itrDirectory, '/\.jpg$/i', RecursiveRegexIterator::ALL_MATCHES );

    Im zweiten Beispiel hättest Du bereits auf alle Dateien mit der Endung .jpg gefiltert. Für weitere Dateiendungen muss dann nur das Pattern angepasst werden und man hat alles, was man braucht, ohne große IF-Konstrukte o.ä.

  • puh, gar nicht so einfach :)



    Er zeit mit schon mal keine Fehler an aber auch keine Bilder :)

    Ich gehe mal davon aus, das der Code keine Bilder finden kann?

  • Sieht aber doch im großen und ganzen schon mal gut aus.


    Aber

    1. benötigst Du das $directory Array nicht für deinen Zweck, der Iterator hat bereits alles gefiltert, was Du benötigst
    2. Wo genau erwartest Du denn eine Ausgabe bzw ein Bild?! In dem gezeigten Code ist davon nichts zu erkennen.


    Tipp:

    Entferne ( oder kommentiere es aus ) alles ab Zeile 6.

    Nach Zeile 5 machst Du mal folgendes:

    PHP
    var_dump( iterator_to_array($itrIterator) );

    Wenn das drin steht, was zu erwarten ist, fällt vielleicht der Groschen ;)


    Ich gehe mal davon aus, das der Code keine Bilder finden kann?

    Wenn der Pfad stimmt ( Linux = CaseSensitive!!! ), sollte es passen.

  • benötigst Du das $directory Array nicht für deinen Zweck, der Iterator hat bereits alles gefiltert, was Du benötigst

    verstehe ich irgendwie nicht :)


    Habe jetzt folgenden Code aber zeigt bei der Vorschau ein Fehler an, ich muss irgendwo ne Klammer oder ähnliches vergessen haben


  • Warum hast Du denn jetzt schon wieder scandir() eingebaut?!

    Wenn Du #15 als Basis nimmst und einfach nur mal den Tipp aus #16 befolgst:

    Entferne ( oder kommentiere es aus ) alles ab Zeile 6.

    Nach Zeile 5 machst Du mal folgendes:

    PHP
    var_dump( iterator_to_array($itrIterator) ); 																				

    Wie sieht der Code dann aus?

  • ok, nochmal von vorne, jetzt würde der Code so aussehen.



    Dann erscheint folgende Fehlermeldung:

    • array(0) { }
  • Anscheinend wird das hier eine endlose Geschichte :D

    *kopfschüttel* ich denke, dies sollte einmal angesprochen werden: Die Vorgänge in diesem Thread und manchmal in Computerforen allgemein haben einen stark irrationalen Charakter: Auf der einen Seite wird der Einsatz von Frameworks oder Bibliotheken abgelehnt mit der gebetsmühlenfaften Begründung "... beraubt dich wertvoller Lernerfahrungen." Und in diesem Fall, wo das Selbermachen mit glob() wirklich einen Lerneffekt in Bezug auf rekursive Programmierung bringen würde, und das Verstehen fortgeschrittener Techniken erleichtern, wird mein Vorschlag diesbezüglich abqualifiziert?

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!