| Zufallsbild auf einer Webseite ausgeben |
Zufallsbild auf einer Webseite ausgebenImmer wieder taucht in Foren die Frage auf, wie man ein Zufallsbild aus einem Ordner auf seiner Webseite ausgeben kann. Als Antwort findet man dann oft die abenteuerlichsten und kompliziertesten Funktionen, bis hin zu teilweise komplexen MySQL Lösungen. Wenn man aber wirklich nur ein (oder eventuell auch mehrere) Ordner hat in dem/denen Bilder liegen aus denen man Eins auslesen möchte, reichen im Prinzip bereits 4 Zeilen Code um das zu verwirklichen. Voraussetzung für die hier gezeigten Methoden ist PHP 4.3 oder höher. Am Ende des Artikels findet Ihr einen Download, der die gezeigten Anwendungsbeispiele, zusammen mit einigen Testbildern, beinhaltet. Ein Zufallsbild aus einem Ordner auslesenMeistens hat man einen zentralen Ordner in dem sich alle Bilder befinden, von denen man gern Eins zufällig herauslesen möchte um es irgendwo auf der Webseite anzuzeigen. Das stellt die einfachste Form für uns dar und folgender Code erledigt diese Aufgabe. $bilder = glob( "zufallsbilder/*.jpg" ); shuffle( $bilder ); $bildinfo = getimagesize( $bilder[0] ); echo '<img src="' .$bilder[0]. '" ' .$bildinfo[3]. ' alt="Zufallsbild" />'; Mit der Funktion glob() liest man ein Verzeichnis aus und alle, den Kriterien entsprechenden, Treffer werden als Array zurück gegeben. In unserem Fall haben wir also im Verzeichnis zufallsbilder nach allen Dateien gesucht, die auf die Endung jpg hören. Da die gefundenen Dateien in einer sortierten Reihenfolge zurück gegeben werden, wir aber gerne ein Zufallsbild hätten, mischen wir das Array (shuffle) einmal durch. Mithilfe er Funktion getimagesize, der wir das erste Element unseres Zufallsbild-Array übergeben, ermitteln wir Bildinformationen, die wir für die Ausgabe in der nächsten Zeile benötigen. Jetzt geben wir nur noch per echo die HTML-Zeile aus, die dem Browser mitteilt welches Bild angezeigt werden soll. Im src geben wir wieder das erste Element unseres Zufallsbild-Array an und damit Höhe & Breite des Bildes auch korrekt im Browser dargestellt werden, geben wir diese Information mit $bildinfo[3] aus. Mehrere Zufallsbilder aus einem Ordner auslesenUm mehrere Zufallsbilder aus einem Ordner auszulesen könnten wir den Code von eben in einer Schleife ausführen. Stattdessen erweitern wir aber unseren Horizont, indem wir eine weitere PHP-Funktion kennen lernen, die für solche Array Zufallswerte geschaffen wurde. $bilder = glob( "zufallsbilder/*.jpg" ); $bild = array_rand( $bilder, 3 ); foreach ($bild as $zufallsbild) { $bildinfo = getimagesize( $bilder[$zufallsbild] ); echo '<img src="' .$bilder[$zufallsbild]. '" ' .$bildinfo[3]. ' />'; } Der Code ist weitestgehend identisch mit dem anderen Beispiel, lediglich die Funktion array_rand ist neu. Erwartet werden von dieser Funktion zwei Parameter, nämlich 1. das Array aus dem Zufallswerte ermittelt werden sollen und 2. wie viele Elemente ermittelt werden sollen. Gibt man keinen 2. Parameter an, wird nur 1 Wert zurück gegeben. Möchte man mehr als 1 Wert haben, wird ein Array mit den Keys der Elemente zurück gegeben. Wir möchten in unserem Beispiel also 3 Zufallsbilder haben, deswegen müssen wir das Rückgabe-Array in der foreach ausgeben. Ein Zufallsbild aus mehreren Ordnern auslesenManchmal hat man auf seinem Server auch Galerie-Strukturen, so das die Bilder, aus denen man gerne ein Zufallsbild hätte, in verschiedenen Ordnern liegen. Jetzt könnte man mehrfach mit glob sämtliche Bilder in ein Array einlesen, anschliessend die Arrays mit array_merge zusammenfassen und dann ein Zufallseintrag ermitteln. Das wäre aber doch recht umständlich und viel zu viel Schreibarbeit. Glücklicherweise kann man glob auch mit mehreren Kriterien füttern, um sich so die Arbeit zu erleichtern. Möchte man an verschiedenen Stellen nach Bildern suchen, gibt man die Pfade an und separiert diese mit einem Komma. Damit glob diesen Ausdruck auch erkennt, muß man diesen "Suchstring" in geschweifte Klammern stecken und der Funktion einen optionalen Parameter übergeben. Hier zunächst der Code: $bilder = glob( "{zufallsbilder/landschaften/*.jpg,zufallsbilder/makros/*.jpg,zufallsbilder/tiere/*.jpg}", GLOB_BRACE ); shuffle( $bilder ); $bildinfo = getimagesize( $bilder[0] ); echo '<img src="' .$bilder[0]. '" ' .$bildinfo[3]. ' alt="Zufallsbild" />'; Wie wir sehen, werden JPG Bilder in 3 verschiedenen Ordnern gesucht. Es ist jeweils der komplette Pfad anzugeben. Ausserdem darf zwischen dem Komma und dem nächsten Suchstring kein Leerzeichen sein! Das GLOB_BRACE teilt der Funktion mit, dass es sich beim Suchstring um eine Kette von Suchstrings handelt. Bis auf diesen Unterschied ist dieses Beispiel identisch mit dem 1. Beispiel. Ein Zufallsbild mit Einschränkung aus einem Ordnern auslesenWie wir bisher bereits gesehen haben ist glob sehr einfach in der Anwendung und bietet gleichzeitig relativ flexible Möglichkeiten. Ein weiterer Vorteil ist, dass man seine Suche nach Dateien auch einschränken kann. Dies geschieht auf eine ähnliche Art wie bei Regulären Ausdrücken. So kann man z.B. auch nach Dateien suchen, die mit einem bestimmten Buchstaben anfangen müssen, oder deren Anfangsbuchstabe in einem bestimmten Bereich liegt. $bilder = glob( "zufallsbilder/[a-f]*.jpg" ); shuffle( $bilder ); $bildinfo = getimagesize( $bilder[0] ); echo '<img src="' .$bilder[0]. '" ' .$bildinfo[3]. ' alt="Zufallsbild" />'; Wie hier zu sehen ist erreichen wir eine Einschränkung indem wir die gewünschten Anfangsbuchtaben in eckige Klammern setzen. In unserem Fall suchen wir nur nach Dateien die mit einem kleinen a bis f beginnen. glob unterscheidet zwischen Groß-/Kleinschreibung! Für einfache Suchmuster reichen hier die Fähigkeiten von glob aus. Muß man allerdings komplexere Suchen durchführen, führt kein Weg an RegEx vorbei. In dem Fall ist es auch besser sich der klassischen Verzeichnisfunktionen zu bedienen. Falls PHP 5 verfügbar ist lohnt sich ein Blick auf die Standard PHP Library, da hier mit den DirectoryIterator und FilterIterator Klassen sehr mächtige Werkzeuge bereitgestellt werden. Eine Einführung in die SPL kann ebenfalls auf phpBuddy.eu gefunden werden. Die hier vorgestellten Beispiele zeigen sehr deutlich, dass man keinen umständlichen Code zu schreiben braucht nur um ein Bild per Zufallsprinzip auf einer Webseite anzuzeigen. Noch eleganter ist es natürlich, den entsprechenden Code in eine Funktion zu packen und das Bild an der gewünschten Stelle im HTML per Funktionsaufruf auszugeben. Auch Verlinkungen o.ä. lassen sich mit leichten Anpassungen problemlos realisieren. Zufallsbild Script (156 KB) |