Unterschiedliche Bildgrößen auf "Anfrage"..., per ModRewrite werden Bilder neu berechnet und gecached! |
Willkommen, Gast ( Anmelden | Registrierung ) [ Hilfe | Mitglieder | Suche ]
Unterschiedliche Bildgrößen auf "Anfrage"..., per ModRewrite werden Bilder neu berechnet und gecached! |
Sun. 3. December 2006, 23:06
Beitrag
#1
|
|
Advanced Member Gruppe: Moderators Beiträge: 911 Mitglied seit: 26.06.2006 Wohnort: Essen; Ruhrgebiet Mitglieds-Nr.: 4 |
So, während ich nach einem ImageEditor gesucht habe bin ich auf folgenden Codeschnippsel gestoßen.
ACHTUNG! Der Hack ist übelst und sollte nicht in einem Produktivsystem eingesetzt werden. Vermutlich sind große Sicherheitslücken drin. Es geht hier erstmal nur ums Anschauen und Rumspielen! Worum geht es überhaupt? Ich hatte immer das Problem, dass meine Redakteure Bilder hochladen, die möglicherweise nicht die korrekte Größe haben. Vor allem bei Galerien wurde da gerne mal direkt aus Digitalkameras reinkopiert. Nun wird ja das Sefrengo Thumbnail direkt erstellt, dass ist also da. Dummerweise brauche ich öfter aber auch passende Bilder in Groß oder in ganz anderen Größen. Manchmal auch ein und das selbe Bild in 3-4 Größen. Lösung In dem anghängten Zipfile befindet sich eine htaccess datei und eine image.php. Durch die modifizierte Sefrengo htaccess Datei wird ein Bild auch mit anderen Adressen erreichbar: Orginal: http://www.domain.de/media/images/testbild.jpg Zusätzlich: http://www.domain.de/media/images/small/testbild.jpg http://www.domain.de/media/images/medium/testbild.jpg http://www.domain.de/media/images/large/testbild.jpg Per ModRewrite wird das ganze dann auf die image.php umgeleitet. Diese erstellt Bilder in der gewünschten, Voreingestellten Größe. Das Bild wird sogar gecached und in ein cache verzeichnis geschrieben. Bei erneutem Aufruf wird getestet ob das Bild schon erstellt wurde und ob sich das Orginal verändert hatte seit dem. Wen nicht wird das Bild aus dem Cache genommen. Damit kann ich jetzt super Module schrauben, indem ich zum Beispiel anstelle des Orginals gleich die Größe nutze, die ich an der STelle haben will. So kann der Redakteur dann ein Bild auswählen und sollte es zu groß sein, wird es runter gerechnet. Installation
- Testen und vor allem Sicherheitslücken klären. Stelle mir vor, dass ich durch die Übergabe von $path und $image große Scheunentore aufgemacht habe! - Besser an Sefrengo anbinden und konfigurierbar machen - Bildgrößen konfiguration flexibeler machen und aus der htaccess datei holen und ganz wichtig: - Feedback von Euch einholen!!!! So, was sagt ihr dazu? Das ersetzt meines Erachtens nicht einen guten Dateimanager im Backend, der das komfortable Bearbeiten von Bildern ermöglicht (min. Drehen, Beschneiden und Skalieren), hilft aber schon mal bei vielen Problemen! Freu mich auf Feedback. imagecache.zip ( 1.71KB ) Anzahl der Downloads: 26 -------------------- |
|
|
Wed. 6. December 2006, 01:59
Beitrag
#2
|
|
Advanced Member Gruppe: Members Beiträge: 54 Mitglied seit: 26.06.2006 Wohnort: Karlsruhe Mitglieds-Nr.: 3 |
Schön solche hübschen .htaccess Lösungen mag ich. Hab damit z.B. eine on-the-fly JS- und CSS-Dateien Komprimierung implementiert.
Zur Sicherheit: Nach QUELLTEXT $path = $_GET["path"]; $image = $_GET["image"]; sollte man noch einige checks machen, sonst könnte man das Skript mißbrauchen, um jede Datei, die der Webserver beschreiben kann, zu löschen: QUELLTEXT $pathinfo = pathinfo($path.$image); (code untested)if (strpos($pathinfo["dirname"], '..')!==false) die("not allowed"); if (!preg_match('~^(jpg|gif|png)$~', $pathinfo["extension"])) die("wrong extension"); if (!file_exists($path.$image)) die("file not found"); Außerdem kann man noch QUELLTEXT RewriteCond %{REQUEST_FILENAME} !-f vor die RewriteRules schreiben: QUELLTEXT # scaling small, medium, large (code untested)RewriteCond %{REQUEST_FILENAME} !-f RewriteRule (.*)small/([A-Za-z0-9]+).(jpg|gif|png)$ image.php?max_width=100&path=$1&image=$2.$3 [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteRule (.*)medium/([A-Za-z0-9]+).(jpg|gif|png)$ image.php?max_width=200&path=$1&image=$2.$3 [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteRule (.*)large/([A-Za-z0-9]+).(jpg|gif|png)$ image.php?max_width=300&path=$1&image=$2.$3 [L] Damit ist sichergestellt, dass Dateien, die wirklich unterhalb eines Ordners small/ liegen, nicht durch dein Skript geschoben werden sondern direkt ausgeliefert werden. Wenn du das Skript noch erweitern möchtest, führe doch auch noch die Behandlung von If-Modified-Since-Abfragen des Browsers ein, das verringert die Serverlast nochmal und verbessert die cachability der Bilder. Damit fühlen sich die Bilder dann wirklich wie "richtige" Bilder an. -------------------- Technikwürze - Design & Webstandards Podcast |
|
|
Vereinfachte Darstellung | Aktuelles Datum: 20.9.24 - 05:58 |