Im Homepage und Webhosting-Forum --- Binär-Daten von Upload in DB speichern
Scripte und Programme für PHP, MYSQL. Diskussionen zur Programmierung im Web. Fragen zu CMS, Blogsoftware, Shops, Newsletter und vielen weiteren Scripten.
Hallo!
Ich wollte gern Bilder vom Upload per PHP in einer MySQL Datenbank speichern.
Habe das mit folgenden PHP-Code Veruscht:
(der Name vom File-Formularfeld heißt 'bild', und ein weiteres Text-Feld 'bild_name')
versucht, leider ohne erfolg.
Wenn ich Test-Weise $datei ausgebe bekomme ich solch Zeichenketten ÒØ\¯”îΪACwØÝûuúU*W
Der Feld-Typ von 'bild' in der DB ist "mediumblob"
Hat jemand ne Idee was ich da noch falsch mache???
Gruß Jan
Ich kann sowas zwar nicht programmieren, aber ich weis das Bilder als text Datei geöffnet eben auch genau aus sollchen Zeichenketten besteht.
Funktioniert die Ausgabe nicht oder landet gar nichts in der DB ?
Noch bessere Frage... warum zur Hölle damit in die DB .. Bilder in die DB zu packen ist Verschwendung, es bläht eine Datenbank unnötig auf .. je aufgeblähter die DB ist um so mehr Performance geht flöten... in den meißten referenzbüchern wird davon abgeraten und das zu Recht
Du kannst doch die Pfade zu den hochgeladenen Bildern in der Datenbank speichern.
Das hat den Vorteil, dass Du - wie Rieke schon geschrieben hat - die DB nicht unnötig aufblähst und alle Vorteile von Datenbanken ausnutzen kannst.
Du würdest also zeilenweise die Tabelle auslesen und setzt in den Tag dann den Bildpfad aus der DB.
Aber bei dem oben gegannten PHP-Code landet gar nichts in der DB.
Mit außnahme, wenn es sich bei der hochgeladenen Bild-Datei nicht wirklich um ein Bild handelt also eine 0 Byte Datei oder eine Text-Datei die 'nur' *.jpg heißt.
Deshalb muss doch warscheinlich noch eine Umwandlung des Strings stattfinden, bevor er an die DB geschrieben wird.
PS: Aus bestimmten Gründen wollte ich eigendlich schon die Bilder selbst in der DB speichern und nicht nur die Pfade, und das sollte doch eigendlich auch mit PHP realisierbar sein...
ich weiß es zwar nicht, aber ich könnte mir vorstellen, dass es genau so ist, wie beim email mit anhang versenden mit php.
d.h. man muss es erst encode:
base64_encode($file_data)
aber wie gesagt, ich hab keine ahnung, ich hab so was noch nie gemacht...
naja, ist bissel viel jetz. hab den code einfach mal rauskopiert.
ich lad die bilder zb auf tripod hoch und benutz nen anderen webserver...
meinen eignen local-webserver...
ich schreiben die daten, die benötigt werden in die mysql...
welcher tripod-acc usw... es funktioniert echt super.
falls ihr irgendwo nicht klar kommt, oder ein modifiziertes script braucht,
einfach nochmal fragen.
ich möchte dir nicht den Tag versauen, kann mich aber den Vorrednern nur anschliessen.
Bildupload macht in der Regel in eine DB wenig Sinn. Die Gründe dafür haben meine Vorredner bereits genannt. Sowas macht nur in ganz speziellen Fällen Sinn.
Wobei ich denke dass so ein Thema wieder ne Diskussion auslösen könnte
Ansonsten:
Bild auf nen FTP laden -> Pfad dann in der MySQL speichert
Das ist wesentlich ressourcenfreundlicher und deine MySQL wirds dir auch danken.
Gruß Stefan
---
This is LINUX land, in silent nights you can hear the Windows machines rebooting.
Günstige MySQL Datenbanken - http://mysqlhosting.de
Das laden auf den "FTP" ist auch nur in Sonderfällen sinnvoll. Damit PHP Bilder auf einen FTP-SErver laden kann, müssen sie erstmal per HTTP-Upload auf den Rechner, auf welchem PHP läuft. Wenn dieser mit dem Webseiten-Auslieferer identisch ist, mahct es wenig Sinn die Dateien noch mal über FTP zu senden, da man sie auch direkt in den Zielpfad verschieben kann.
Naja - ich denke wir können uns darauf einigen, dass je nach Nutzen die entsprechede Lösung (DB Store, FTP) praktibal ist. Das muss man eben abwägen. Hat beides seine Vor- und Nachteile.
---
This is LINUX land, in silent nights you can hear the Windows machines rebooting.
Günstige MySQL Datenbanken - http://mysqlhosting.de
1. HTTP-Upload - Metadaten in die DB
2. HTTP-Upload - Alles in die DB
3. FTP-Upload - Sync in die DB
Der erste Fall ist die "normale" und wohl häufigste Variante. Einfach hochladen in ein bestimmtes Verzeichnis (möglichst außerhalb des Document-Root). Die zweite Variante ist bei verteilten Systemen denkbar, welche auf eine zentrale Datenbank zugreifen. Jedoch sollten die einzelnen Webserver die Bilder dann lokal cachen (im Dateisystem).
Der letzte Fall spielt seinne Vorteil aus, wenn man den Upload nicht mehr nur über den Browser erledigt. FTP ist deutlich schneller und kommt auch mit sehr großen Dateien zurecht. Die Vorteile kommen jedoch nur zum Tragen, wenn man einen speziellen Client nutzt.
die normale ist wohl schon, wie du sagst.... nur hatte ich glaub schon dazu gesagt,
oder nicht?, das meicn webserver hier local bei mir steht.
damit die bilder nicht so viel traffic bei mir verursachen, lade ich sie per ftp zu lycos hoch
und setze den pfad zum bild in der sql ein....
---
Irren is Menschlich
Wer andern eine Grube gräbt,
sollte darüber nachdenken,
ob sie tief genug ist!!!!
achso, vergessen...
bei anderen scripten von mir, wird natürlich nur http(php) benutzt,
um bilder hochzuladen...
wie bei dem mit ftp, wird der pfad dann wieder in der mysql hinterlegt....
hätte vielleicht nen anderes script raussuchen sollen, um das hier nicht
unnötig zu komplizieren. das war aber gleich das erste, was ich in die finger bekommen
habe.
---
Irren is Menschlich
Wer andern eine Grube gräbt,
sollte darüber nachdenken,
ob sie tief genug ist!!!!
Ich hatte das ja schon darauf eingeschränkt, das Upload- und Seitenserver identisch wären.
Du hast natürlich recht. Bei einem solchen verteilten System, wie du es beschreibst, macht es sehr viel Sinn den zweiten Teil der Strecke FTP zu nutzen.
Hallo,
kann mir auch jemand helfen, bin nicht so das Programmiergenie. Versuche mit diesem Code die Datei auf einen Server zu laden und gleichzeitig den Datei-Namen (strFileName) und die Beschreibung (bildername) in eine DB-Tabelle (newsbilder) zu schreiben. Aber irgendwie bekomme ich hiermit nur den Upload hin, er schreib mir nichts in die DB.