Ankündigung

Einklappen
Keine Ankündigung bisher.

Problem bei Bildern aus blobs

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Problem bei Bildern aus blobs

    Hi

    bei dem Versuch, mit php 5.1.1, bilder aus der Datenbank, mysql 4.0.26 , auszuesen bekomme ich jedoch kein bild angezeigt, obwohl ein datensatz gefunden und daten übertragen werden.

    der code hierfür ist:

    $query = "SELECT type, image, name, secure FROM image WHERE name='$name'";
    $result = mysql_db_query($dbname,$query);

    $query_data = mysql_fetch_array($result);
    $image = $query_data['image'];
    $type = $query_data['type'];

    header("Content-type: $type");
    echo $image;

    Im browser, in diesem fall firefox, wird das bild nicht angezeigt.
    wenn man sich die "grafik anzeigen" lässt erhält man nur:

    http://localhost/get_blob.php?name=derNameDesBildes.jpg
    Laut eigenschaften der "seite" ist der content-type richtig

    in der Quelltext-Anzeige beginnt das bild mit einer leerzeile "zuviel".
    speichert man die datei ab und vergleicht sie mit dem original gleichen sie sich nicht.

    Ist dies ein Zeichensatzproblem, das die binärdaten falsch umgewandelt werden, und wenn ja wie kann man es beheben.

    für konstruktive hilfe wäre ich sehr angetan,
    jalu


  • #2
    wenn man sich die "grafik anzeigen" lässt erhält man nur:

    http://localhost/get_blob.php?name=derNameDesBildes.jpg
    Laut eigenschaften der "seite" ist der content-type richtig
    Danke, sehr aussagekräftig.

    Mehr Fehlerbehandlung und -ausgabe. Dafür weniger überflüssiger Schnickschnack (wie $x=$y)
    PHP-Code:
    <?php
    error_reporting
    (E_ALL);
    ini_set('display_errors'true);
    // $name wurde hoffentlich gegen sql injections behandelt?
    $query "SELECT type, image, name, secure FROM image WHERE name='$name'";
    // db_query ist seit langer Zeit deprecated: $result = mysql_db_query($dbname,$query);
    mysql_select_db($dbname) or die(mysql_error());
    mysql_query($query) or die(mysql_error().': '.$query);

    $query_data mysql_fetch_array($result);
    if (!
    $query_data) {
        die(
    'keine Daten gefunden');
    }
    if (!
    headers_sent()) {
        
    header('Content-type: '$query_data['type']);
        echo 
    $query_data['image'];
    }
    ?>

    Kommentar


    • #3
      fehler werden nicht geworfen, es werden ja auch daten selektiert.

      um das ganze zu verbildlichen

      so sieht es aus wenn ich das bild direkt aufrufe:


      so sieht es aus wenn ich mir den "quelltext" des bilds anzeige:

      die rot eingekreiste leerzeile sollte nicht sein imho.
      acdsee kann die so abgespeicherte datei lesen. paint zb ned

      wenn ich das selbe bild statisch einbinde, aus dem dateisystem heraus, dann funktioniert es und ich habe diese leerzeile am anfang nicht.
      (wenn ich das ganze ohne aus der datenbank heraus ohne header() ausgebe dann habe ich diese leerzeile am anfang nicht

      Kommentar


      • #4
        http://www.php-faq.de/q/q-db-blob.html

        Halt dich dran und du hast keine so dämlichen Probleme, wo was der Geier dran Schuld sein könnte.
        Wahrscheinlich ists so nen blöder Fehler, dass dein MIME-Typ oder der SQL-Befehl doch nicht stimmt. Ich seh ihn zumindest nicht auf den ersten Blick, aber so Probleme sind echt überflüßig..

        Kommentar


        • #5
          ein beeindruckend freundlicher ton herrscht hier ja vor.

          ich habe das beispiel umgesetzt, half ned.

          http response header kommt wie folgt an:
          Date: Fri, 06 Jan 2006 19:13:23 GMT
          Server: Apache/2.0.52 (Win32) PHP/5.1.2RC3-dev
          X-Powered-By: PHP/5.1.2RC3-dev
          Cache-Control: no-store, no-cache, max-age=0, must-revalidate
          Keep-Alive: timeout=15, max=100
          Connection: Keep-Alive
          Transfer-Encoding: chunked
          Content-Type: image/jpeg

          200 OK


          datenbank, php und apache haben iso-8859-1 als charset eingetragen

          jeglicher ausgabe von php, egal ob echo´tes html oder aus der datenbank
          beginnt nach dem header mit hex "09 09 0D 0A" (tab tab cr lf)

          statische dateien die vom apache übertragen ist es nicht enthalten,
          ebenso wenig in dem blob den ich aus der datenbank ausgeben will.

          wenn ich testweise zwischen header und die "eigentliche" ausgabe einen "trenner" hänge so ist das "tab tab cr lf" über dem trenner.

          es scheint also aus header() zu kommen und hängt wohl irgendwie mit zeichensatz oder ländereinstellungen zusammen.

          bitte diesmal die antworten etwas weniger künstlich provozierend dafür mehr sachlich.

          Kommentar


          • #6
            Dann nochmal hiermit versuchen (entweder 1:1 kopiert oder garnicht, bitte)
            PHP-Code:
            <?php
            error_reporting
            (E_ALL);
            ini_set('display_errors'true);
            ini_set('output_buffering'0);

            // $name wurde hoffentlich gegen sql injections behandelt?
            $query "SELECT type, image, name, secure FROM image WHERE name='$name'";
            // db_query ist seit langer Zeit deprecated: $result = mysql_db_query($dbname,$query);
            mysql_select_db($dbname) or die(mysql_error());
            mysql_query($query) or die(mysql_error().': '.$query);

            $query_data mysql_fetch_array($result);
            if (!
            $query_data) {
                die(
            'keine Daten gefunden');
            }

            ob_flush(); flush();

            if (!
            headers_sent()) {
                
            header('Content-type: '$query_data['type']);
                echo 
            $query_data['image'];
            }
            ?>

            Kommentar


            • #7
              ok fehler selber gefunden..
              hinter dem ?> tag einer include datei in welcher einige globale variablen hinterlegt sind
              waren noch zeilenumbrüche..

              windows zeilenumbruch = cr lf

              diese hat das php engine treudoof in den den output buffer gemüllt

              der include war zwar weit vor dem header() oder anderen ausgaben, ist jedoch irgendwie zwischen den http header und den eigentlichen content gekommen..

              html hat die verschiebung des contents um 1 zeile nach unten zwar nicth gejuckt,
              den jpeg interpreter des browsers allerdings schon

              naja selbst dran dumm

              dennoch danke für die mühen,
              jalu

              Kommentar

              Lädt...
              X