Bilder aus Mysql mit PHP ausgeben
Schorsch
- php
0 Thorsten F.0 Axel Richter0 martin430 martin43
Guten Tag
Wie kann ich mit PHP ein Bild ausgeben?
Das Bild liegt in einer Mysql Datenbank.
Mit Hilfe von Selfhtml habe ich folgende Lösung gefunden:
1. In der Datei a.php habe ich:
<img src="img.php?id=1" alt="" />
2. In der Datei img.php habe ich:
$sql = 'SELECT data
FROM bild
'
.'WHERE bildID
= ''.$id.'' LIMIT 0,1';
$result = mysql_query($sql);
if($result)
{
$bild = mysql_fetch_row($result);
}
else{echo mysql_error();}
// Ausgabe
Header("Content-Type: image/jpeg");
echo $bild[0];
Folgendes ist der Fall:
- Die $id kommt korrekt an und ist gültig.
- Die DB-Abfrage stimmt.
- $bild behinhaltet die Daten eines JPEG Bildes.
- Fehlermedlungen werden keine ausgegeben.
- Im Browser zeigen die Eigenschaften des Bildes:
- Unbekannter Typ
- Grösse -1 Byte
- Die Frage, ob es schlau ist, Bilder in einer Mysql-DB
aufzubewahren, wird hier nicht gestellt.
Was muss ich machen, damit die Bilder angezeigt werden?
Gruss
Schorsch
Ich habe auch mal am Anfang Bilder in meiner DB gespeichert.
Die Spalte hieß Grafik und die zeilen sahen dann so aus:
<img src="../bidl.gif">
und das wars. Das per php auszugeben ist ja kein Problem.
Also statt irgendeinen Ausruck in der DB zu speicher, habe ich die den ganz normalen <img> tag (schreibt man das so?) in der DB stehen.
$anfrage = mysql_query("Select Grafik from tab_name");
while($data = mysql_fetch_array($anfrage, MYSQL_ASSOC))
{
echo $data[Grafik];
}
fettisch!
Hallo Thorsten,
<img src="../bidl.gif">
und das wars. Das per php auszugeben ist ja kein Problem.
Schon, aber er hat die Bilder nicht in Dateien, sondern in der Datenbank abgespeichert - somit ist sein Ansatz vollkommen korrekt, du hast sein Problem denke ich nicht ganz verstanden gehabt - aber das passiert.
Ich weiß jetzt auch nicht genau woran es liegen sollte.
@Schorsch: Versuch doch mal, die ausgelesenen Daten in eine Datei zu schreiben. Wenn diese JPG-Datei angezeigt werden kann, weiß ich auch nicht weiter - andernfalls hast du ein kleines Problem, denn dann ist das Bild wohl defekt.
Bis dann!
Marc Reichelt || http://www.marcreichelt.de/
Hallo,
Wie kann ich mit PHP ein Bild ausgeben?
Das Bild liegt in einer Mysql Datenbank.
// Ausgabe
Header("Content-Type: image/jpeg");
echo $bild[0];
Was muss ich machen, damit die Bilder angezeigt werden?
In jedem Fall kannst Du _nicht_ die Bilddaten mit echo einfach in den Quell_TEXT_ schreiben.
http://de.php.net/manual/de/function.imagejpeg.php
viele Grüße
Axel
Hallo Axel,
Wie kann ich mit PHP ein Bild ausgeben?
Das Bild liegt in einer Mysql Datenbank.
// Ausgabe
Header("Content-Type: image/jpeg");
echo $bild[0];Was muss ich machen, damit die Bilder angezeigt werden?
In jedem Fall kannst Du _nicht_ die Bilddaten mit echo einfach in den Quell_TEXT_ schreiben.
du hast ins Schwarze getroffen!
Damit Schorsch nicht so viel Aufwand hat habe ich noch eine entsprechende Funktion gefunden - in den Kommentaren gibt's auch ausreichend Material:
http://de.php.net/manual/de/function.imagecreatefromstring.php
Bis dann!
Marc Reichelt || http://www.marcreichelt.de/
Hallo,
Wie kann ich mit PHP ein Bild ausgeben?
Das Bild liegt in einer Mysql Datenbank.
// Ausgabe
Header("Content-Type: image/jpeg");
echo $bild[0];
du hast ins Schwarze getroffen!
Nein, habe ich nicht. Offensichtlich kann echo das doch und in der Doku steht fälschlicherweise, dass echo nur Strings ausgibt.
Der Fehler ist die ungenügende Umsetzung der HTTP-Spezifikation durch einige (einen?) Browser:
header("Content-type: image/jpeg");
^
grr. Bin ich mit Java schon so oft drüber gestolpert, und jedesmal vergesse ich es wieder.
Und bei einem Bild sollte eigentlich auch
header("Content-length: $size");
mitgeliefert werden. Wie man an $size kommt, probierst Du selbst aus?
viele Grüße
Axel
Salve
Offensichtlich kann echo das doch und in der Doku steht fälschlicherweise, dass echo nur Strings ausgibt.
Der Fehler ist die ungenügende Umsetzung der HTTP-Spezifikation durch einige (einen?) Browser:
header("Content-type: image/jpeg");
// So klappts:
$result = mysql_query($sql);
$data = @mysql_result($result,0);
$img = imagecreatefromstring($data);
// Ausgabe
Header("Content-Type: image/jpeg");
imagejpeg($img);
Und bei einem Bild sollte eigentlich auch
header("Content-length: $size");
mitgeliefert werden.
Soll? Muss? Warum?
Vielen Dank euch coolen Profis!
Gruss
Schorsch
Hallo Schorsch,
Vielen Dank euch coolen Profis!
Nun ja, das ist etwas zu viel der Ehre - ich habe nie mit den Funktionen gearbeitet, weiß aber, dass es sie gibt.
Wie du Profi wirst: Einfach in der PHP-Dokumentation nach Stichwörtern zu deinem Problem suchen! :-)
Wenn man einmal so einige Probleme allein mit dieser Dokumentation gelöst hat, dann schafft man es auch sehr schnell, andere (und komplexere!) Probleme zu lösen.
SELFHTML lässt grüßen... ;-)
Bis dann!
Marc Reichelt || http://www.marcreichelt.de/
Hallo Schorsch, natürlich geht das völlig unkompliziert:
<html><head><title>Test</title>
<?
echo "<script type="text/javascript">
<!--
fensterbreite = screen.width
if(screen.width >= 1024)
document.write (fensterbreite)
else
window.location.href = "datei_2.htm"
//-->
</script>";
?>
</head><body>
</body></html>
Beachte bitte die Backslash's vor den doppelten Anführungszeichen!!!
MfG martin
Entschuldigung, ich war im falschen Thread. martin