PHP Tips für Bilder Upload

lordg2009

Lt. Commander
Registriert
Apr. 2009
Beiträge
1.503
Hi,

Ich betreibe eine Seite, auf der Nutzer eigenen Text in eine Datenbank hochladen und dieser anschließend abrufbar ist. In ca. 1% der Fälle IST es sinnvoll ein Bild hochzuladen um den Sinn des Textes zu unterstreichen. Im Moment habe ich gerade mal wieder Zeit dieses Feature zu implementieren.

Da ich noch nie mit Bildern auf Websites gearbeitet habe, hier ein paar Fragen, bevor es los geht:

- ist es sinnvoll die Bilder mit imagick nach Upload zu komprimieren und konvertieren, um ein einheitliches Format zu haben? (Der Speicher spielt eine untergeordnete Rolle)
- Scalen wollte ich die Bilder mit max-width in px um ein responsive Design zu erreichen
- Ablegen wollte ich die Bilder in einem eigenen Ordner, oder sind sie als Blob in der DB besser aufgehoben?
- ist es sinnvoll, Beim Upload der Daten den MIME-Typ zu überprüfen und nur gewisse Formate (z.B. jpg, gif, png) zuzulassen?
- sonst noch Tips?

Vielen Dank für eure Hilfe?
 
Binaries, Bilder etc. würde ich immer im Filesystem ablegen. Zum Einen bläst das die Datenbank nicht unnötig auf und macht zum Anderen die Arbeit damit leichter:

  • Dateien lassen sich deutlich einfacher/performanter sichern als riesige Datenbanken. Ein Backup/Restore einer riesigen Datenbank dauert auf jeden Fall sehr lange und ist komplexer zu Handlen.
  • Bilder im Filesystem verringern die Last. Bilder die direkt verlinkt sind werden im Browser gecached. Lädst du die erst über ein Script und ziehst sie dann aus der DB wird Client-seitig nichts mehr gecached und du belastest deinen Server unnötig.
  • Falls es den Bedarf gibt alle Bilder oder auch nur eine Teilmenge für welche Zwecke auch immer exportieren zu müssen, sind solche Exporte via Filesystem deutlich einfacher zu erstellen.

Eine MIME-Type oder Dateiendungsprüfung für deinen Upload kannst du zwar einbauen üblicherweise findet aber auch der dümmste User sehr schnell heraus, dass er beliebige Dateitypen einfach umbenennen kann. Ich spreche da aus Erfahrung. Wir betreiben eine Anwendung die fast nur von DAUs verwendet wird. Wir erlauben eigentlich ausschließlich PDF-Uploads und hatten das ursprünglich mittels Dateiendung abgesichert. Bei einer Prüfung der Daten stellten wir dann fest, dass 80% der Uploads umbenannte JPGs, GIFs etc. waren. :) Bei sowas hilft nur noch eine Prüfung des Dateiinhalts.
 
Zuletzt bearbeitet:
lordg2009 schrieb:
- ist es sinnvoll die Bilder mit imagick nach Upload zu komprimieren und konvertieren, um ein einheitliches Format zu haben? (Der Speicher spielt eine untergeordnete Rolle)
Umwandlung in ein Dateiformat nicht (also mach aus PNG kein JPG, versaut z.B. Transparenzen), aber eine Skalierung auf eine einheitliche Maximalgröße macht sehr wohl Sinn. Du weißt, wie Leute drauf sind: Sie knipsen mit ihrem 9-12MPix - Smartphone, alles was rumläuft. So. Jetzt zeig mir den Monitor, der 12MPix auch darstellen kann... Außerdem könntest du noch überprüfen, ob EXIF-Daten eines Lagesensors vorhanden sind, diese Daten auswerten (Bild per imagick drehen) und dann die EXIF-Daten löschen. Andernfalls kann es sein, dass ein User ein Hochkant-Foto hoch lädt, aber ein anderer User in seinem Browser die Lagedaten nicht korrekt auswertet und der Inhalt gedreht erscheint. Hatte ich schon...

- Scalen wollte ich die Bilder mit max-width in px um ein responsive Design zu erreichen
Gute Idee. Aber denk dran, dir eine Funktion zu bauen, die Thumbnails erzeugt und cached. Was bringt dir ein 1600x1000 - Bild in der Vorschau, wenn du 4 davon nebeneinander kachelst?
- Ablegen wollte ich die Bilder in einem eigenen Ordner, oder sind sie als Blob in der DB besser aufgehoben?
File System ist schneller und macht deutlich weniger Ärger beim Backup. Du solltest aber eine Verbindung zwischen FS und DB erzeugen, z.B. indem du aus Dateiname und Hash einen Schlüssel baust. Auf die Weise kannst du Meta-Informationen (Titel, Alt, Beschreibung,...) zu jedem Bild speichern.

- ist es sinnvoll, Beim Upload der Daten den MIME-Typ zu überprüfen und nur gewisse Formate (z.B. jpg, gif, png) zuzulassen?
Immer. http://php.net/manual/de/ref.fileinfo.php ist dein Freund.
Du musst dir vor allem überlegen, ob du SVG (und SVGZ) zu lässt oder nicht.
 
1000 Dank euch beiden. So hab ich mir das vorgestellt. Exakte Antworten auf meine Fragen, ohne dummes rumgelaber. Ihr seid spitze.

Dann mal ans Werk.
 
Dummes Gelaber gibts erst, wenn du dich künstlich doof anstellst und selbst einfachste Probleme nicht mit ner cleveren Google-Frage beantworten kannst. Präzise Fragen resultieren in präzisen Antworten.
 
Zurück
Oben