Constanze Nagel: Content-Length nie passend - BLOB aus Datenbank

Hallo liebes Forum,

seit Tagen quäle ich mich mit der Content-Length umher. Ich muss aus einer MySQL-Datenbank die in einem BLOB gespeicherten JPEG-Dateien ausgeben.

(Es sei an dieser Stelle bitte dahingestellt, ob es sinnvoll ist, Grafiken in einem RDBMS abzulegen oder nicht - danke! ;)

Das BLOB selbst wird über ein

$data = fread(fopen($tmpname,"rb"),$dateigroesse);

direkt in die Datenbank eingetragen.

Bei der Ausgabe der Grafik jedoch bin ich darauf angewiesen, die Content-Length mit auszugeben. Leider knallt es an dieser Stelle. Denn ein einfaches:

header("Content-Type: ".$typ);
header("Content-Length: ".$dateigroesse);
header("Content-Disposition: inline; filename=".$dateiname);
echo $datei_aus_db;

führt dazu, dass das Bild zwar korrekt ausgegeben wird, es aber offenbar nicht die richtige Content-Length übergeben bekommen hat. Die Browser-Downloadleiste bleibt stehen bis ein Abbruch erfolgt. Die Grafik ist aber voll übertragen.

Wenn ich die Content-Length ganz weglasse, klappt es wunderbar.

Ich habe schon alles probiert:

header("Content-Length: ".strlen(stripslashes($datei)));
header("Content-Length: ".strlen(chop(trim(stripslashes($datei)))));
header("Content-Length: ".strlen($datei));

Mit, ohne addslashes (auch beim Hochladen der Original-Dateien und deren Ablage in in Form der BLOB-Dateien). Mit mysql_real_escape_string und ohne. Mit Beachtung von set_magic_quotes_runtime und ohne....

Wie Ihr seht, bin ich am Verzweifeln.

Sicher hat schon einer von Euch ein ähnliches Problem gehabt?!

Würde mich über jeden auch noch so kleinen Hinweis ganz doll freuen...

* Connie *

  1. Hi,

    header("Content-Length: ".$dateigroesse);

    Wo kommt der Wert in $dateigroesse her?

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    Schreinerei Waechter
    Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
    1. Hey ;)

      header("Content-Length: ".$dateigroesse);
      Wo kommt der Wert in $dateigroesse her?

      Den Wert habe ich vorher aus dem Formular über $_FILES['xyz']['size'] übernommen. Geprüft habe ich ihn auch - und er ist korrekt. Diesen Wert habe ich mit in die Datenbank gelegt.

      * Connie *

  2. yo,

    Bei der Ausgabe der Grafik jedoch bin ich darauf angewiesen, die Content-Length mit auszugeben. Leider knallt es an dieser Stelle.

    ich bin nicht gerade der html/PHP spezialist, habe aber ähnliches etwas bei php.net den kommentaren (Philipp Heckel & snagnever, etc.) darüber gefunden.

    http://www.php.net/manual/de/function.header.php

    Ilja