Seite 1 von 1

Alternative zu Snippet "Zufällige Bilder im Header"

Verfasst: 21.07.2009 10:00
von CarstenF
Guten morgen,

nach kurzer netter Vor-PM von Dr. Death zum Thema (ursprünglich als Snippet-Ergänzung gedacht) möchte ich mein Posting gerne hier wiederholen:

Ich beschäftige mich gerade mit zufälligen Bildern im Header, wie auf
http://www.phpbb.de/viewtopic.php?t=162961 bzw.
http://www.phpbb.com/kb/article/adding- ... ader-image
beschrieben.

Die zwei kleinen Nachteile der Methode sind, dass man die core Datei includes/functions.php ändern muss, und dies bei einer Änderung der Anzahl der Bilder auch immer wieder tun muss.

Eine recht elegante Alternative, die mit Änderungen an der styles/.../template/overall_header.html auskommt (oder sogar ganz ohne (?), je nach dem wo {SITE_LOGO_IMG} herkommt), ist z.B. unter
http://www.alistapart.com/articles/randomizer/ oder
http://ma.tt/scripts/randomimage/
beschrieben.

Diese Technik kann man noch verkürzen - mein Favorit ist der so entstehende Zweizeiler (für PHP ab 4.2):

Code: Alles auswählen

<?php

// Grab all desired file names from the proper folder.
$BilderNamen=glob("./MyImage*.png");

// Redirect to one of them randomly.
header('Location: '.$BilderNamen[mt_rand(0, count($BilderNamen)-1)]);
?>
Hier die Antwort von Dr. Death:

Danke für Deine Info,

aber der Befehl "glob" kann in phpBB nicht verwendet werden, da er in manchen Filesystemen nicht korrekt funktioniert und erst ab PHP 4.3 verfügbar ist.

Siehe auch: http://de.php.net/manual/en/function.glob.php

Zusätzlich sollten alle Zugriffe auf Filesystem (wenn möglich) aus performance Gründen vermieden werden.
Wenn bei jedem Seitenaufruf ein "glob" oder ein "fopen()" alle möglichen Bilder "abgrasen" muss, kann es einen stark besuchten Server belasten.

Daher ist es an dieser Stelle besser auf bewusst vorhandene Bilder zuzugreifen.

Du kannst aber gerne dazu ein Thema im "Coding" oder "Bastelstube" Forum posten.... dies per PN zu diskutieren halte ich nicht für sinnvoll ;-)
Ok... das mit dem glob() ist natürlich einleuchtend, könnte man notfalls mit opendir() usw. vermeiden, aber kennt jemand eine (einfache) Möglichkeit, sowas zu cachen? Ideal wäre ohne DB-Zugriff... :wink:
Nur bekannte Dateinamen zu verwenden ist aber sicherlich die einfachste und schnellste Lösung, sogar in nur einer einzigen Zeile: :D

Code: Alles auswählen

// Passe die 20 an die tatsächliche Anzahl der Bilder an.
header("Location: ./MyImage-".mt_rand(1, 20).".png");    // ungetestet...
Noch eine Frage: Was haltet ihr an dieser Stelle von der zweiten Zeile, redirection auf das eigentliche Bild?
Für mein Eindruck eine elegante Alternative zum Zurückgeben des Bildes durch das Script selbst, aber sieht da von Euch jemand eventuelle Nebenwirkungen oder Folgeprobleme?

Herzlichen Dank!

Re: Alternative zu Snippet "Zufällige Bilder im Header"

Verfasst: 24.07.2009 17:35
von igorw
CarstenF hat geschrieben:Ok... das mit dem glob() ist natürlich einleuchtend, könnte man notfalls mit opendir() usw. vermeiden, aber kennt jemand eine (einfache) Möglichkeit, sowas zu cachen? Ideal wäre ohne DB-Zugriff... :wink:
Klar, phpBB3 bietet ein starkes caching system. API dokumentation ist zu finden unter phpBB Wiki: Cache. Hier ist ein beispiel für die verwendung aus install/install_update.php.

Code: Alles auswählen

                // Get current and latest version
                if (($latest_version = $cache->get('_version_info')) === false)
                {
                        $this->latest_version = $this->get_file('version_info');
                        $cache->put('_version_info', $this->latest_version);
                }
                else
                {
                        $this->latest_version = $latest_version;
                }

Re: Alternative zu Snippet "Zufällige Bilder im Header"

Verfasst: 02.08.2009 20:37
von Boecki91

Code: Alles auswählen

                if (($header_img = $cache->get('header_img')) === false)
                {
                        $this->header_img = select_header_img();
                        // Every 10 min a new header image, 10*60 Sec
                        $cache->put('header_img', $this->header_img, 600);
                }
                else
                {
                        $this->header_img = $header_img;
                }
Sollte dann so alles sein, nur die select_header_img() darfst du noch schreiben ;)

Re: Alternative zu Snippet "Zufällige Bilder im Header"

Verfasst: 03.08.2009 01:31
von CarstenF
Toll!
Herzlichen Dank Euch beiden - wieder was dazugelernt! :geek: :grin: