Fragen zu Dateiupload
glan
- php
0 EKKi1 dedlfix0 Robert Bienert
Hallo,
ich versuche gerade irgendwie zu realisieren, dass man ein Bild in eine Datenbank speichert.
Meine Tabelle ist vorbereitet (mit ID, und einer Spalte für das Bild, die BLOB sein muss, oder?).
1. Problem: Wenn die Datei aus dem Formular übergeben habe, bekomme ich, wenn ich
var_dump($_FILES);
habe, folgende Ausgabe:
array(1) { ["datei"]=> array(5) { ["name"]=> string(16) "test.png" ["type"]=> string(9) "image/png" ["tmp_name"]=> string(22) "\tmp\php82.tmp" ["error"]=> int(0) ["size"]=> int(797736) } }
Wie bekomm ich das Bild jetzt als Bild-Ressource?
2. Problem:
Wenn ich das Bild irgendwann einmal anzeigen lassen will, will ich dass nach der Abfrage eine PHP-Bildressource des Bildes erstellt wird. Wie geht das?
MfG glan
Mahlzeit,
Meine Tabelle ist vorbereitet (mit ID, und einer Spalte für das Bild, die BLOB sein muss, oder?).
Gute Wahl. :-) Vielleicht wäre noch eine Spalte mit dem Content-Type sinnvoll, könntest Du mal ausprobieren ...
- Problem: Wenn die Datei aus dem Formular übergeben habe, bekomme ich, wenn ich
var_dump($_FILES);
habe, folgende Ausgabe:
array(1) { ["datei"]=> array(5) { ["name"]=> string(16) "test.png" ["type"]=> string(9) "image/png" ["tmp_name"]=> string(22) "\tmp\php82.tmp" ["error"]=> int(0) ["size"]=> int(797736) } }Wie bekomm ich das Bild jetzt als Bild-Ressource?
Indem Du die Datei, deren Namen Du unter $_FILES['datei']['tmp_name']
findest, einfach als Binärdatei öffnest und den Inhalt mit einem INSERT
-Statement in Deine Tabelle schreibst? Oder alternativ den Inhalt dieser Datei direkt in Deine Tabelle schreibst (wenn Dein DBMS entsprechende Funktionen bereitstellt und auch auf das Dateisystem zugreifen darf)?
Wenn ich das Bild irgendwann einmal anzeigen lassen will, will ich dass nach der Abfrage eine PHP-Bildressource des Bildes erstellt wird. Wie geht das?
Sinnvollerweise baust Du Dir eine "blob2img.php" o.ä., der Du z.B. als Parameter die ID des Bildes übergibst, die dann das entsprechende Bild aus der Tabelle ausliest, den eigenen Content-Type entsprechend setzt und an den Browser die Binärdaten des Bildes zurückgibt.
Dann könntest Du Deine Bilder folgendermaßen im HTML ansprechen:
<img src="/foo/bar/blob2img.php?ID=4711" alt="wunderprächtiges Bild">
MfG,
EKKi
echo $begrüßung;
ich versuche gerade irgendwie zu realisieren, dass man ein Bild in eine Datenbank speichert.
Meine Tabelle ist vorbereitet (mit ID, und einer Spalte für das Bild, die BLOB sein muss, oder?).
Es gibt verschiedene BLOB-Typen, die sich bezüglich der Größe unterscheiden. Ein BLOB mit einer Größe von 2^16 wird schwerlich 797736 Byte aufnehmen können.
- Problem: Wenn die Datei aus dem Formular übergeben habe, bekomme ich, wenn ich var_dump($_FILES); habe, folgende Ausgabe:
array(1) { ["datei"]=> array(5) { ["name"]=> string(16) "test.png" ["type"]=> string(9) "image/png" ["tmp_name"]=> string(22) "\tmp\php82.tmp" ["error"]=> int(0) ["size"]=> int(797736) } }
Das ist nur Information über den Upload. Wenn du vor dem Ausgeben komplexer Strukturen mit var_dump() oder print_r() ein <pre> ausgibst, bekommst du eine übersichtlichere Darstellung. Wie du an die Datei kommst, steht im Kapitel Handling file uploads.
Wie bekomm ich das Bild jetzt als Bild-Ressource?
Du meinst Bild-Ressource wie für die Image-Funktionen? Das ist für deinen Fall uninteressant, wenn du nicht auch noch Bildbearbeitung machen möchtest. So eine Bild-Datei unterscheiet sich nicht von einer Musik-Datei oder digitalisierten Kekskrümeln. Du brauchst nur Dateifunktonen, um ihren Inhalt auszulesen. Den musst du dann der Datenbank übergeben. Dazu kannst du die Bilddaten in ein herkömmliches Statement einbetten (inklusive Beachtung des Kontextwechsels und der damit einherzugehenden Behandlung der Daten) und dieses zum Server senden. Oder du verwendest eine moderne Datenbankschnittstelle, die Prepared Statements anbietet.
Wenn ich das Bild irgendwann einmal anzeigen lassen will, will ich dass nach der Abfrage eine PHP-Bildressource des Bildes erstellt wird. Wie geht das?
Zum Auslesen mit anschließendem Zum-Browser-Schicken brauchst du ebenfalls keine Bild-Ressource. Du musst einfach nur die Daten mit passendem ContentType versehen ausgeben.
echo "$verabschiedung $name";
Moin!
ich versuche gerade irgendwie zu realisieren, dass man ein Bild in eine Datenbank speichert.
Welchen Vorteil hat das gegenüber einer Speicherung in einem Bilderordner? In der Datenbank würdest du dann nur den Dateinamen und evtl. seinen Content-Type vorhalten.
Viele Grüße,
Robert