Stolzi: Bilder ohne Endung Problem?

Hallo,

ich habe ein Script das Bilder über eine Datenbank verwaltet. Da ich sie nicht in der Datenbank speichern möchte werden sie als Dateien gespeichert und haben den Namen der id in der Tabelle.
Da mein Script mit jpg, gif und png (es stellt den Bildtyp natürlich nicht über die Endung fest) umgehen kann wäre es recht umständlich an jeden Bildnamen die Endung zu hängen.
Ich habe nun schon Bilder ohne Endung in neueren Versis von IE,Opera und Thunderbird getstet und es funktionierte wunderbar.
Kann es dadurch dennoch irgendwo Probleme geben, oder sollte es unbedenklich sein?

Danke
Stolzi

  1. Moin!

    Ich habe nun schon Bilder ohne Endung in neueren Versis von IE,Opera und Thunderbird getstet und es funktionierte wunderbar.

    In HTTP ist der Name einer Ressource unerheblich, wichtig zur korrekten Verarbeitung im Browser ist allein die Angabe des Mime-Typs.

    Wenn deine Konstruktion sicherstellt, dass eine Grafik mit dem korrekten Mime-Typ ausgeliefert wird, wird es in allen standardkonformen Browsern funktionieren.

    - Sven Rautenberg

    --
    My sssignature, my preciousssss!
    1. Leider kenne ich mich in dieser Richtung noch nicht so sehr aus. Meinst du damit, daß nur der Mime-Typ des Bildes korrekt sein muß (das wäre er auf alle Fälle), oder, daß ich dem Browser den Mime-Typ irgendwie mitteilen muß? In diesem Fall wüßte ich nicht wie ich ihm das über das img Tag mitteile?

      Danke
      Stolzi

      1. hi,

        Meinst du damit, daß [...] ich dem Browser den Mime-Typ irgendwie mitteilen muß?

        Ja, genau das ist gemeint.

        In diesem Fall wüßte ich nicht wie ich ihm das über das img Tag mitteile?

        Gar nicht.
        Du teilst es über den Content-type Header mit, den der Server in seiner Antwort auf die Anfrage des Clients nach dem Bild mitschickt.

        In PHP beispielsweise geht das mit der Funktion header().

        gruß,
        wahsaga

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }
        1. Du teilst es über den Content-type Header mit, den der Server in seiner Antwort auf die Anfrage des Clients nach dem Bild mitschickt.

          In PHP beispielsweise geht das mit der Funktion header().

          Hmm, jo, das ist mir klar wie ich den Content-type Header sende. Aber das geht doch nur, wenn die Seite nur aus einem Bild besteht, oder? Ich binde die Bilder aber mit einem normalen img Tag in eine Html Seite ein. Es können dann sowohl gif, als auch jpg, oder png Bilder auf einer Seite sein. Da kann ich ja dann schlecht den Content-type Header angeben, oder?
          Habe ich da irgendwo einen Denkfehler?

          Danke

          1. Hi,

            Habe ich da irgendwo einen Denkfehler?

            keine Ahnung, aber es ist doch nun mal so, dass der Client eine Ressource des Webservers anfordert (bspw. eine PHP-Ressource) und dass daraufhin eine serverseitige Logik losrattert und die HTTP-Response generiert. Und dieser gibst Du eben die Meta-Information content type mit.

            Didi

          2. hi,

            Hmm, jo, das ist mir klar wie ich den Content-type Header sende.

            Aber das geht doch nur, wenn die Seite nur aus einem Bild besteht, oder? Ich binde die Bilder aber mit einem normalen img Tag in eine Html Seite ein. Es können dann sowohl gif, als auch jpg, oder png Bilder auf einer Seite sein. Da kann ich ja dann schlecht den Content-type Header angeben, oder?

            Habe ich da irgendwo einen Denkfehler?

            Ja.
            Für _jede_ Ressource führt der Client einen HTTP-Request aus, und erhält eine Antwort vom Server, eine "Response".
            Und diese Response enthält auch ggf. Header wie bspw. den für den Content-type.

            Du lieferst also nicht deine HTML-Seite mit einem zu einem JPEG-Bild passenden Content-type aus - sondern das Bild selber.

            gruß,
            wahsaga

            --
            /voodoo.css:
            #GeorgeWBush { position:absolute; bottom:-6ft; }
            1. Du lieferst also nicht deine HTML-Seite mit einem zu einem JPEG-Bild passenden Content-type aus - sondern das Bild selber.

              Arg, aber habe keine Ahnung wie das dann aussieht :-( Effektiv gebe ich in Kurzform (Jetzt sollte das Thema eigentlich PHP heißen) folgendes in meiner PHP Datei aus:

              <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
              <html>
                <head>
                <title></title>
                </head>
                <body>
                Der Text<br>
                <img src="<?=$PicPath1?>" alt="Bild">
                <img src="<?=$PicPath2?>" alt="Bild">
                <img src="<?=$PicPath3?>" alt="Bild">
                </body>
              </html>

              Nun, den Header könnte ich senden in der Datei bevor die Ausgabe startet. Aber so gilt der Header ja für das ganze Dokument mit Text und verschiedenen Bildern.

              Kann mir da wer auf die Sprünge helfen? :-(

              Danke
              Stolzi

              1. Hi,

                Du solltest langsam mal kapieren, dass wenn eine PHP-Ressource, die auch existiert, clientseitig adressiert wird, dass dann serverseitig ein PHP-Script ausgeführt wird, das (idealerweise ;-) Deiner vollen Kontrolle unterliegt und ausgeben kann was Du möchtest. Also bspw. eine JPG-Datei laden und anschliessend ausgeben. Dieser Ausgabe gibst Du die Meta-Information ("Headerdaten") content type mit.

                Der Browserclient nimmt die Daten entgegen als ob er ein JPG angefordert hat und keine PHP-Ressource adressiert hat.

                Didi

                1. Ok, Hirnknoten beseitigt ;-) Danke euch zweien!

              2. hi,

                <img src="<?=$PicPath1?>" alt="Bild">

                Was macht dein Browser, wenn er das in einem HTML-Dokument findet?

                Richtig, er fordert eine weitere Ressource vom Webserver an - unter eben der Adresse, die dort im src-Attribut angegeben ist.

                Nun, den Header könnte ich senden in der Datei bevor die Ausgabe startet. Aber so gilt der Header ja für das ganze Dokument mit Text und verschiedenen Bildern.

                Nein, ein beim Ausliefern des HTML-Dokumentes mitgeschickter Header gilt _nur_ für diese Ressource.

                Die vom Browser anschließend angeforderten Bilder stellen aber jeweils eigenständige Ressourcen dar.
                Und für diese gibst du _jeweils_ den passenden Content-type Header aus.
                Das machst du über ein Script, welches die Bilddaten an den Client ausliefert.

                gruß,
                wahsaga

                --
                /voodoo.css:
                #GeorgeWBush { position:absolute; bottom:-6ft; }
                1. Hello,

                  Und für diese gibst du _jeweils_ den passenden Content-type Header aus.
                  Das machst du über ein Script, welches die Bilddaten an den Client ausliefert.

                  Das sollte der HTTP-Server doch anderenfalls auch automatisch können, oder?

                  Harzliche Grüße vom Berg
                  http://www.annerschbarrich.de

                  Tom

                  --
                  Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                  Nur selber lernen macht schlau

                  1. hi,

                    Und für diese gibst du _jeweils_ den passenden Content-type Header aus.
                    Das machst du über ein Script, welches die Bilddaten an den Client ausliefert.

                    Das sollte der HTTP-Server doch anderenfalls auch automatisch können, oder?

                    Natürlich, das kann er sehr gut, wenn er den Content-type anhand der Dateiendung bestimmen kann.

                    Aber wenn du im Eingangsposting noch mal nachliest, hielt es da ja jemand für geschickt, die Bilddateien _ohne_ Dateiendung im Filesystem abzulegen.
                    Dass das aber eigentlich weniger geschickt war, dürfte dieser Thread ja jetzt gezeigt haben - weil wir hier ein "Problem" diskutieren, welches es ohne diese eigentümliche Vorgehensweise höchstvermutlich gar nicht erst gegeben hätte.

                    gruß,
                    wahsaga

                    --
                    /voodoo.css:
                    #GeorgeWBush { position:absolute; bottom:-6ft; }
                    1. Hello,

                      Aber wenn du im Eingangsposting noch mal nachliest, hielt es da ja jemand für geschickt, die Bilddateien _ohne_ Dateiendung im Filesystem abzulegen.
                      Dass das aber eigentlich weniger geschickt war, dürfte dieser Thread ja jetzt gezeigt haben - weil wir hier ein "Problem" diskutieren, welches es ohne diese eigentümliche Vorgehensweise höchstvermutlich gar nicht erst gegeben hätte.

                      Dann sollten wir dem OP ans Herz legen, so wie er selber schon fast vorgeschlagen hat, die Endung beim Upload auf Richtigkeit zu überprüfen und entsprechend an den Dateinamen anzuhängen.

                      Er kann dann seinen Bilddatensatz sinnvollerweise so aufbauen

                      ID_BILD
                        MIMETYPE
                        EXTENSION
                        ...

                      und daraus beim Abfragen sofort die passenden Informationen entnehmen.

                      Dann muss eben nach einer Datei mit dem Namen ID_BILD.EXTENSION gesucht werden, was wohl das PHP-API und die DB nicht umbringen wird.

                      Aber ich verstehe nicht, warum das Insert-Date nicht gleich in die DB reingeschreiben wird. Das spart dann doch wirklich Power im Dateisystem. Die file*time-Funktionen fressen nämlich ganz gut Ressourcen.

                      Harzliche Grüße vom Berg
                      http://www.annerschbarrich.de

                      Tom

                      --
                      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                      Nur selber lernen macht schlau

                      1. Hello,

                        Aber ich verstehe nicht, warum das Insert-Date nicht gleich in die DB reingeschreiben wird. Das spart dann doch wirklich Power im Dateisystem. Die file*time-Funktionen fressen nämlich ganz gut Ressourcen.

                        Sorry, da war ich wohl im falschen Posting, aber es passte gerade so gut zusammen :-)

                        Harzliche Grüße vom Berg
                        http://www.annerschbarrich.de

                        Tom

                        --
                        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                        Nur selber lernen macht schlau