Header-Problem bei Bildern aus mySQL

Dommas

Erfahrenes Mitglied
Hallo Leute

Ich habe jetzt auch mal so ein Problem mit den Headers, welche man ja nur vor dem HTML-Output übermitteln darf. Soweit, so klar also. Ich habe eine index.php mit einem Switch...Case, welches über URLs steuert, welche Seite via include in die index.php eingebunden wird.
Nun muss ich aber auf Befehl der Uni noch Bilder in die mySQL DB speichern und wieder auslesen. Speichern funktioniert perfekt, nur mit dem Auslesen haperts noch. Ich habe die Fehler auf einen einzigen reduzieren können, und zwar den "Headers already sent"-Fehler.
Kann mir jetzt aber jemand sagen, wie ich denn die Header für das Auslesen eines binären Objekts aus der DB setze, wenn ich mal zufällig ein Bildchen brauche?
Ich habs schon so probiert: via URL fordere ich in der index.php ein Bild an: get_image.php?picID=435, das Bild sollte dann doch in der Datei get_image.php geladen und retourniert werden oder nicht? Ich weiss echt nicht mehr weiter und wäre für jede Hilfe dankbar.

Thomas
 
Hallo!

Ja habe ich, auch wenn mir in der Uni gesagt wurde, da könnten andere Probleme draus resultieren. Ich hab ObStart / ObEndFlush sowohl um den Image-Link (1.Bsp.) als auch beim senden des Headers für den Filetype (2. Bsp.) gesetzt. Beide Male blieb der Fehler bestehen.

1. Bsp. <img src=get_image.php?imageID=435>

2. Bsp. header(sprintf("Content-type: %s", $row['type']));

Andere Ideen?

Gruss
Thomas
 
Nur eine Vermutung..... aber könnte evtl. am sprintf() im header() liegen.
So viele Grafikformate werden es ja sicherlich nicht sein, daher würde ich eine Switch bauen.
Ungefähr so (ich gehe mal davon aus dass in der Spalte "type" jpg, gif, png usw. stehen):
PHP:
switch($row['type']) {
    case "jpg": $type = "image/jpeg";
    break;
    case "gif": $type = "iamge/gif";
    break;
    case "png": $type = "image/png";
    break;
}

header("Content-Type: ".$type);
Ggf. noch um weitere Grafikformate erweitern.
 
Hi,

Danke für dein Engagement.

Leider bringt auch das nichts, einzig die Zeile, in der der Fehler auftritt, wechselt ...
An was könnte es noch liegen? Eigentlich ist es mir ja klar, dass man die Header nicht mehr ändern kann nach dem der HTML-Code geladen ist, aber gibt's nicht noch irgendeinen Trick?

Gruss Thomas

Edit: Wenn ich die "getimage.php" direkt aufrufe und ihr eine ID für ein Bild übergebe, dann kommt das Download-Fenster von Firefox, d.h.: Firefox will die "getimage.php" downloaden. Wenns noch das Bild wäre! Aber er will die PHP-Seite downloaden...
 
Zuletzt bearbeitet:
Ok mach ich doch gerne :-) Das Problem mit den Headern ist jetzt ok dank ob_start und ob_end_flush, jedoch können die Bilder eben nicht dargestellt werden, weil der Browser immer versucht, die PHP-Datei runterzuladen...

Hier der Code:

PHP:
<?php
include("db_connect.inc");
mysql_connect ($host, $sqluser, $sqlpassword);

$temp_id = $_GET['id'];
$extract = mysql_query(sprintf("SELECT * from userimage WHERE user_id = '$temp_id'"));
$row = @mysql_fetch_array($extract);

switch($row['type']) {
    case "jpg": $type = "image/jpeg";
    break;
    case "gif": $type = "image/gif";
    break;
    case "png": $type = "image/png";
    break;
}
header("Content-Type: ".$type);
//$test = $row['content'];
print $row['content'];
//echo "<img src=$test>";
?>

Gruss Thomas
 
Danke für den Tipp, das korrigier ich gleich. Nach dem neuen Test schreib ich dann, ob's nun geklappt hat!

EDIT: Klappt leider noch nicht, die Frage ist jetzt, wie ich das Ganze anfordern, resp. ausgeben soll. Folgendermassen hab ich das gemacht:

echo "<img src='getimage.php?id=$id'>";

Dieser Befehl steht nicht in der "getimage.php" sonder in der Datei "profile.php". Müsste ich das anders machen?
 
Zuletzt bearbeitet:
Ist schon richtig so.
Jetzt gibt es eigentlich nurnoch 2 Möglichkeiten..... entweder das Bild wird nicht korrekt eingetragen und/oder die Datenbankstruktur stimmt nicht.
Zeige mal die Datenbankstruktur.
 
Zurück