Problem beim Anzeigen von Fotos aus einer Datenbank

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

  • Problem beim Anzeigen von Fotos aus einer Datenbank

    Hallo!

    Ich habe hier eine Datenbank in der Fotos für eine Website direkt gespeichert sind. An dieser Tatsache kann ich nichts ändern, obwohl man sich er über den Sinn und Unsinn diskutieren kann.

    Wenn ich nun ein Foto mittels PHP aus der Datenbank auslese und in HTML anzeigen lasse, wird es korrekt dargestellt.

    Code:
    <IMG SRC="thumbnail.php?show=54" BORDER=0>
    Mein Problem ist nun, wen ich mit der rechten Maustaste auf das Bild klicke und es speichern will, wird mir als Dateiname immer "unbenannt" und als Format "bmp" vorgegeben ... bei den Fotos handelt es sich aber um JPEGs. Auch das Drucken der HTML-Seite bereitet Probleme. Hier werden die Fotos gar nicht angezeigt.

    In der PHP-Datei sende ich folgende Header:

    PHP-Code:
    header('Content-type: image/jpeg');
    header('Content-Disposition: inline; filename=thumbnail.jpg'); 
    Ich habe auch bereits versucht die PHP-Datei anstatt mit .php mit .jpeg enden zu lassen, aber gebracht hat es nichts.

    In einem anderen Forums-Beitrag, habe ich etwas von einem IE Bug gelesen, doch der scheint in diesem Fall nicht der Grund zu sein, da die dort beschriebene Lösung nichts hilft und es nur bei diesen Fotos aus der Datenbank auftritt, sonst nicht.

    Hat jemand eine Idee für eine Lösung ??

  • #2
    Re: Problem beim Anzeigen von Fotos aus einer Datenbank

    der IE möchte IIRC noch einen passenden Content-length header haben, um glücklich zu sein ...
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      ganz einfach, du speicherst das bild serverseitig mit befehl


      imagejpeg($Bildobjekt, "Bildname.jpg", 100)


      und bindest es dann per <IMG SRC='Bildname.jpg'> tag per HTML ein.

      Kommentar


      • #4
        serversseitig speichern war ja nicht die wunschlösung

        tritt das problem bei anderen browsern auch auf?

        Kommentar


        • #5
          Das beschriebene Problem tritt nur beim IE auf.

          Aber ich habe gerade die Lösung für mein Problem gefunden. Man darf keine Session in der Datei starten, die das Image zurückliefert. Das scheint den Header irgendwie kaputt zu machen. Nachdem ich session_start() entfernt habe, läuft alles wunderbar.

          Außerdem sollte man darauf achten, dass sich nicht irgendwo (z.B. am Dateiende) Leerzeichen versteckt haben, die dort eigentlich nicht hingehören.

          Kommentar


          • #6
            PHP-Code:
            <?php
            include $_SERVER['DOCUMENT_ROOT'].'/../files/global.inc.php';
            include 
            INCLUDE_DIR.'defines.inc.php';

            session_name(SESSION_NAME);
            session_start();
            $path INCLUDE_DIR.'/sec_img/';

            // some more code goes here

            header('Content-Type: image/jpeg');
            imagejpeg($im''100);
            imagedestroy($im);
            ?>
            so läuft das einwandfrei bei mir und auch auf meinem IE
            Ich denke, also bin ich. - Einige sind trotzdem...

            Kommentar


            • #7
              Original geschrieben von Daywalker13
              Man darf keine Session in der Datei starten, die das Image zurückliefert.
              das ist blödsinn.
              Das scheint den Header irgendwie kaputt zu machen.
              du hast vermutlich noch irgendeine ausgabe (fehlermeldung?) durch das starten der session bekommen, was dann die ausgabe des korrekten content-type headers für das bild verhindert hat.
              I don't believe in rebirth. Actually, I never did in my whole lives.

              Kommentar


              • #8
                Ich halte das keineswegs für blödsinn.

                Mit meiner Session ist alles in Ordnung und es wird keine Fehlermeldung, Warnung oder sonst etwas zurückgegeben, dass ich von meiner Seite beeinflussen könnte.

                Kommentar


                • #9
                  Original geschrieben von Daywalker13
                  Ich halte das keineswegs für blödsinn.
                  ich schon, oder warum funktioniert es denn dann bei mir?


                  poste mal den code und am besten noch einen link zu einem solchen image, bei dem du wieder _mit_ sessions arbeitest
                  Ich denke, also bin ich. - Einige sind trotzdem...

                  Kommentar


                  • #10
                    ich schon, oder warum funktioniert es denn dann bei mir?
                    Naja, wenn du mir erklärst, wo mein Fehler ist, bzw. weshalb meine Session fehlerhaft sein soll, dann habe ich absolut kein Problem damit, dass meine Aussage blödsinn war. Aber im Moment kann ich nicht nachvollziehen, was an meiner Session falsch sein soll. Tatsache ist nur, sobald ich "session_start()" entferne kann ich das Foto im IE als Jpeg speichern, sonst nicht.

                    Leider kann ich dir keinen Link geben, da die Datenbank und der Webserver nur lokal bei mir erreichbar sind und ich das nicht ändern kann.

                    Aber hier ist der Quellcode der Datei, die das Foto aus der Datenbank holt:

                    PHP-Code:
                    <?php
                    require_once('./inc/settings.inc.php');

                    session_start();

                    if (!empty(
                    $_SESSION["cn"])) {

                            if (
                    $connection odbc_connect$dsn['database'], $dsn['username'], $dsn['password'] )) {

                                
                    $Query_ID odbc_exec($connection"SELECT datei, groesse FROM ".$db_fotodaten.
                                                                                          WHERE id='"
                    .($_GET["show"])."' and typ='thumbnail'");

                                
                    odbc_longreadlen $Query_ID104857600);
                                
                    odbc_binmode($Query_IDODBC_BINMODE_RETURN);

                                 
                    $image odbc_result($Query_ID1);
                                
                    $imagegroesse odbc_result($Query_ID2);


                                
                    header('Content-type: image/jpeg');
                                
                    header('Content-length: '.$imagegroesse);
                                
                    header('Content-Disposition: inline; filename=foto75dpi.jpg');
                                echo 
                    $image;


                            }



                    } else {

                                
                    header"Content-type: image/gif");
                                echo 
                    file_get_contents($serverpfad."images/dummy.gif");

                    }
                    ?>

                    Kommentar


                    • #11
                      und der code produziert das allseits bekannte ungeliebt rote x?

                      dann ruf das bild mal direkt auf, was kommt dann im browser?

                      also statt <img src="bild.php?PHPSESSID=456"> nur bild.php?PHPSESSID=456 oder wie auch immer deine session heißt
                      Ich denke, also bin ich. - Einige sind trotzdem...

                      Kommentar


                      • #12
                        Der Code zeigt das Bild korrekt an.

                        Nur wenn ich mit der rechten Maustaste auf das Foto klicke und "Bild speichern unter..." sage, bekomme ich immer als Dateiname "unbenannt" und als Format nur Bitmap ".bmp".

                        Kommentar


                        • #13
                          ja klar muß dann bei rechtsklick der quatsch reinkommen,

                          weil deine datei die du an den IE übermittelst ja keinen namen hat!

                          der name der datei ergibt sich ja erst über die speicherung!!



                          womit wir dann wieder bei der einbindung per html währen.

                          meine lösung für ein ähnliches problem, bei dem tumbnails generiert werden und dann wieder überschrieben war dann diese, dass ich das bild erzeugte, dem ie übermittelte per html einbindung und dann per unlink wieder löschte beim nächsten aufruf. ist zwar ne hammermethode aber funktioniert garantiert und webspace verbrauchts auch nicht, da die temporär-dateien ja immer wieder gelöscht werden.
                          Zuletzt geändert von oeno; 18.10.2004, 11:52.

                          Kommentar


                          • #14
                            @oeno: er versucht durchaus den namen vorzugeben. insofern ist deine Aussage nicht ganz korrekt!

                            Kommentar


                            • #15
                              Vielleicht ist mein Problem aus den vorherigen Beiträgen nicht ganz deutlich.

                              Im IE wird das Foto korrekt angezeigt.

                              Nur bei "Bild speichern unter" wird als Dateiname "unbenannt" und als Format "Bitmap" angezeigt, solange ich session_start() in der Datei stehen habe.

                              Entferne ich session_start() wird sowohl der richtige Dateiname, als auch das richtige Format beim Speichern angezeigt.

                              In anderen Browsern wie z.B. Firefox wird immer alles korrekt angezeigt, egal ob mit session_start() oder ohne.

                              Ich hätte gerne, dass ich auch im IE mit session_start() den richtigen Dateinamen und Format angezeigt bekomme.

                              Ich schaue jetzt schon längere Zeit im PHP Handbuch und diversen anderen Quellen, aber ich kann keine Lösung für mein Problem finden.
                              Auch sehe ich nicht, dass ich einen Fehler bei der Session mache. Es reicht ja schon ein einfaches session_start(), ohne das ich irgendwas mit der Session mache oder eine Session-Variable benutze, damit das Problem auftritt.

                              Kommentar

                              Lädt...
                              X