PHP Vorschaubild automatisch erstellen und in Datenbank speichern?

F

Fat32Tony

Gast
Hey!

Ich habe im Moment eine Website mit ziemlich vielen Bildern. Da diese teilweise ziemlich groß sind würd ich gerne ein Vorschaubild automatisch generieren lassen und in der zugehörigen mysql Datenbank speichern.

Nun 2 Fragen dazu:
1. Macht das aus eurer Sicht her Sinn?

2. Wenn ich ein script dazu bastel, sollte ich es täglich ausführen oder immer bei Aufruf der Hauptseite etc...

Hoffe auf Antworten und Erfahrungswerte :)

lg
 
Bilder gehören ins Filesystem. Das Vorschaubild wird einmal angelegt, wenn ein Bild hochgeladen wird (entweder direkt im upload-script oder per cron) und der Pfad dazu (und zum Thumbnail) in der DB hinterlegt.
 
1. Jein, du könntest auch ein Vorschaubild in eine Datei schreiben und nur den Pfad dafür in die Datenbank. Also z.B. ein dateiname_thumb.jpg z.B.
2. Da gibt es viel zu viele Möglichkeiten: alle Thumbnails für existierende Dateien jetzt generieren und dann immer direkt beim Bildupload, Thumbnails jedesmal generieren wenn die Datei angezeigt wird, Thumbnail beim erstenmal der Anzeige des Bildes in dateiname_thumb.jpg schreiben etc. Kommt immer auch auf die jeweiligen Umstände an. Pauschalaussagen gibts nicht.
 
Unter Umständen kann es schon sinnvoll sein, Dateien in die DB zu speichern. Beide Varianten bringen Vor- und Nachteile mit sich. Für deinen Fall ist eine Ablage im Dateisystem wahrscheinlich trotzdem das beste.
 
Fat32Tony schrieb:
Nun 2 Fragen dazu:
1. Macht das aus eurer Sicht her Sinn?
Bild erzeugen? Macht sehr viel Sinn.
Bild in die Datenbank packen? Macht keinen Sinn.

2. Wenn ich ein script dazu bastel, sollte ich es täglich ausführen oder immer bei Aufruf der Hauptseite etc...
Weder noch. Mach es, wenn:
a) kein Vorschaubild vorhanden ist
oder
b) das Vorschaubild älter ist als das echte Bild (du also was am Original geändert hast)

e-Funktion schrieb:
Unter Umständen kann es schon sinnvoll sein, Dateien in die DB zu speichern. Beide Varianten bringen Vor- und Nachteile mit sich.
Dateien in der Datenbank zu speichern bringt quasi keine Vorteile, nur Nachteile.
- Im Falle von Replikation (Master-Slave oder Master-Master) muss eine riesige Zeile repliziert werden. Das ist lahmarschig hoch 10.
- Schreibvorgänge am Bild lösen unter Umständen lange Table-Locks aus. Geht gar nicht.
- Um das Bild anzuzeigen, muss es erst aus der Datenbank gelesen, von PHP (oder sonstwas) geparsed, mit ordentlichen Headern versehen und an den Webserver verfüttert werden. Im Vergleich dazu ist ein direkter Filesystem-Zugriff durch den Webserver quasi instant. Webserver (allen voran nginx & Cherokee) sind pfeilschnell, wenn sie statische Ressourcen vom Dateisystem ausgeben. Verglichen damit... Webserver übergibt Anfrage an PHP, PHP übergibt Anfrage an DB, DB wartet auf eventuelle Table Locks, DB liest Tabelle von Festplatte, DB durchforstet Spalten, DB füttert PHP, PHP baut einen Header und echo't den Kram an den Webserver, Webserver gibt Kram aus... Schrott. Totaler Schrott.
- Von Filesysteme lassen sich deutlich leichter inkrementelle Backups ziehen
- Große BLOBs (und TEXTs) führen bei aktuellen MySQL/MariaDB-Versionen bei Verwendung von InnoDB zu unvorhergesehenen Problemen mit der Log-Size.
- Portabilität... Ich sollte mal eine alte gehackte TYPO3 - Seite in ein anderes CMS portieren und dafür Automatismen für die Inhalte schaffen... Schönen Dank, wenn jedes Bild sinnlos als BLOB-Feld in der DB definiert ist.
 
Webserver übergibt Anfrage an PHP, PHP übergibt Anfrage an DB, DB wartet auf eventuelle Table Locks, DB liest Tabelle von Festplatte, DB durchforstet Spalten, DB füttert PHP, PHP baut einen Header und echo't den Kram an den Webserver, Webserver gibt Kram aus... Schrott. Totaler Schrott.
Ich stimme eigentlich zu was Bild-BLOBs in der DB angeht, aber:
bis zu "PHP baut einen Header" muss bei Speichern des Thumbnails oder Ablage eines Thumbnail Pfads alles auch gemacht werden, egal ob Blob oder Dateiname. Nur die Größe jedes Records ist natürlich kleiner.
.
 
Nicht, wenn man eine anständige Struktur baut.

Eine Option:
- du schreibst einen Cron, der regelmäßig die Thumbnails auf Existenz überprüft und bei Bedarf anlegt.
- im User-Code gehst du einfach davon aus, dass die Thumb - File existiert und gibst ungeprüft <a href="img/img.png"><img alt="" src="img/thumb/img.png"></a> aus.

Alternative:
Du spielst mit Rewrite Rules. Wenn Tumb als File existiert, gib Thumb-File aus. Wenn nicht, übergib den gewünschten Pfad an ein PHP-Script.
 
Zurück
Oben