Bilder ohne Endung Problem?
Stolzi
- browser
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
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
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
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
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
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
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
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
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
Ok, Hirnknoten beseitigt ;-) Danke euch zweien!
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
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

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
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

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
