Dateiendungen bei Bildern
Kathrin
- browser
Hallo ihr alle!
Ich habe bei den hochgeladenen Bildern auf meinem Server die Dateiendungen weggelassen. Also anstelle "kathrin.jpg" heißt das Bild nur "kathrin".
Der Gedanke dahinter war, daß ich nicht weiß welche Art von Bildern andere User hochladen.
Ein Bild namens "kathrin.gif" würde natürlich nicht angezeigt werden, wenn im Pfad "kathrin.jpg" steht.
Erstaunlicherweise scheint kein Browser ein Problem mit den fehlenden Endungen zu haben.
Allerdings frag ich mich, ob das auch professionell ist!
Alternativ könnte ich vielleicht alle Bilder in jpg konvertieren.
was meint ihr???
Kathrin
Moin
Allerdings frag ich mich, ob das auch professionell ist!
Mit Sicherheit nicht professionell!
Alternativ könnte ich vielleicht alle Bilder in jpg konvertieren.
was meint ihr???
Wenn du serverseitig arbeitest (PHP oder ähnliches) würde ich erstens dem User nur bestimmte Dateiformate zum upload anbieten (Wenn es nur Bilder sein sollen) und zweitens zur Anzeige den Dateityp auslesen.
Wenn du nur JPG und GIF-Dateien erlaubst und PHP verwendest, kannst du den Typ mit getimagesize() auslesen und eine entsprechende Endung zuweisen. Um den Dateinamen ohne Endung zu erhalten hilft dir sicher basename() weiter
Gruß Bobby
Du meinst also, jedesmal bevor das Bild im Browser zu sehen ist, überprüfen um welches Dateiformat es sich handelt.
Hmm, ich glaub fast da wär's einfacher alle Bilder beim upload schon in ein Format zu konvertieren.
Ich benutze übrigens Perl und Image Magick. Ich denk das wird Bilder schon irgendwie konvertieren können.
Nur mal ganz nebenbei: Was ist so falsch daran, die Endung nicht mitzuspeichern, außer daß es "unprofessionell" ist?
Schließlich ist die Information um welches Format es sich handelt, doch in der Datei mit abgespeichert, oder nicht?
Kathrin
Hi,
Du meinst also, jedesmal bevor das Bild im Browser zu sehen ist, überprüfen um welches Dateiformat es sich handelt.
Wozu?
Ein normal konfigurierter Server kuemmert sich gerne selber darum, die Bilder mit dem passenden Content-Type-Header auszuliefern, wenn du die ueblichen Bildendungen beibehaeltst.
Hmm, ich glaub fast da wär's einfacher alle Bilder beim upload schon in ein Format zu konvertieren.
Ja, das waere einfach - einfach bloedsinnig.
http://aktuell.de.selfhtml.org/artikel/grafik/gif-jpeg/
Nur mal ganz nebenbei: Was ist so falsch daran, die Endung nicht mitzuspeichern, außer daß es "unprofessionell" ist?
Schließlich ist die Information um welches Format es sich handelt, doch in der Datei mit abgespeichert, oder nicht?
Per HTTP angeforderte Ressourcen sollten immer mit einem Content-Type-Header ausgeliefert werden, der Aufschluss ueber den Inhalt dieser Ressource gibt.
Mit normalen Endungen kann der Server den passenden Content-Type selber ermitteln und mitschicken - bei Dateien ohne Endung i.a.R. nicht.
Dann muss der Browser also anschliessend "raten", um welche Art von Inhalt es sich handelt. Auch wenn das alle Browser bei Bildern leidlich gut hinbekommen, ist das aeusserst unschoen.
MfG ChrisB
Hi,
Ein normal konfigurierter Server kuemmert sich gerne selber darum, die Bilder mit dem passenden Content-Type-Header auszuliefern, wenn du die ueblichen Bildendungen beibehaeltst.
Das Problem ist aber doch, daß ich ein Bild mit dem Pfad
"/bilder/kathrin.jpg"
nicht finde, wenn es in Wirklichkeit ein gif ist und dann diesen Pfad hat:
"/bilder/kathrin.gif"
Ich müßte also immer irgendwo mit abspeichern, um welches Format es sich handelt. Das wollte ich eben vermeiden.
Was mich direkt zu meiner nächsten Frage bringt:
Wieso sollte der Bildername aus der ID UND einem Zufallsteil bestehen?
Wofür ist der Zufallsteil?
Hmm, ich glaub fast da wär's einfacher alle Bilder beim upload schon in ein Format zu konvertieren.
Ja, das waere einfach - einfach bloedsinnig.
DANKE für den Link! Ich kenn bereits den Unterschied zwischen jpg und gif!
Außerdem müssen Userbilder nicht gestochen scharf sein.
Per HTTP angeforderte Ressourcen sollten immer mit einem Content-Type-Header ausgeliefert werden, der Aufschluss ueber den Inhalt dieser Ressource gibt.
Mit normalen Endungen kann der Server den passenden Content-Type selber ermitteln und mitschicken - bei Dateien ohne Endung i.a.R. nicht.
Dann muss der Browser also anschliessend "raten", um welche Art von Inhalt es sich handelt.
Ich weiß zwar nicht, ob das Informationen zu der Diskussion beiträgt, aber die Bilder sind immer in HTML-Seiten eingebettet.
Insofern gebe ich den Content-Type-Header selber an und der Browser kann nicht mehr raten. Oder versteh ich Dich jetzt falsch?
MfG
Kathrin
Hi,
Das Problem ist aber doch, daß ich ein Bild mit dem Pfad
"/bilder/kathrin.jpg"
nicht finde, wenn es in Wirklichkeit ein gif ist und dann diesen Pfad hat:
"/bilder/kathrin.gif"
Natuerlich wird es nicht gefunden, wenn du nicht den richtigen Namen angibst. Die Loesung fuer dieses "Problem" lautet: Gebe den richtigen Namen an.
Ich müßte also immer irgendwo mit abspeichern, um welches Format es sich handelt. Das wollte ich eben vermeiden.
Warum?
Bloedsinnig.
Ich weiß zwar nicht, ob das Informationen zu der Diskussion beiträgt, aber die Bilder sind immer in HTML-Seiten eingebettet.
Insofern gebe ich den Content-Type-Header selber an und der Browser kann nicht mehr raten. Oder versteh ich Dich jetzt falsch?
Dir scheint nicht klar zu sein, was der Content-Type-Header eigentlich ist.
Das ist ein HTTP Response Header, den der Server beim Ausliefern einer Ressource mitsendet.
MfG ChrisB
Hello,
Wenn du nur JPG und GIF-Dateien erlaubst und PHP verwendest, kannst du den Typ mit getimagesize() auslesen und eine entsprechende Endung zuweisen. Um den Dateinamen ohne Endung zu erhalten hilft dir sicher basename() weiter
basename() sollte den Dateinamen _mit_ Endung liefern, es sei denn, man kennt die Endung schon, dann kann man sie durch das Zusatzargument in der Funktion abschneiden lassen.
Ich würde aber basename() immer auf den übertragenen Namen des Bildes anwenden, weil dieser auch einen ganzen Pfad enthalten könnte und dann könnten auf dem Server unangenehme Dinge geschehen.
Außerdem würde ich Bilder auch nicht unter dem Wunschnamen des Clients abspeichern, sondern unter einem eigenen, der dann zu einem teil zufällig gewählt wird zum anderen Teil die User-ID enthält. Dann lassen sich die gesammelten Werke auch wiederfinden.
Den gewünschten Bildnamen merkt man sich dann in einer Tabelle.
Und dann noch was: Die Bilder möglichst nicht in einem Verzeichnis abspeichern, dass direkt durch HTTP erreichbar ist oder zumindest nicht geparst wird beim Aufruf. Da könnten sich dann doch mal "Bilder" einschliechen, die in Wirklichkeit eigentlich PHP- oder Perl-Code sind.
Ein harzliches Glückauf
Tom vom Berg
Hi,
Außerdem würde ich Bilder auch nicht unter dem Wunschnamen des Clients abspeichern, sondern unter einem eigenen, der dann zu einem teil zufällig gewählt wird zum anderen Teil die User-ID enthält. Dann lassen sich die gesammelten Werke auch wiederfinden.
ich versteh das mit dem Zufallsteil immernoch nicht. Schließlich hält der ja auch nichts geheim. Spätestens wenn ich das Bild mal eingebettet in eine HTML-Seite sehe, kann ich ja den Pfad im Quelltext auslesen. Und den könnte ich dann auch direkt in die Adresszeile des Browsers eingeben.
Und dann noch was: Die Bilder möglichst nicht in einem Verzeichnis abspeichern, dass direkt durch HTTP erreichbar ist oder zumindest nicht geparst wird beim Aufruf. Da könnten sich dann doch mal "Bilder" einschliechen, die in Wirklichkeit eigentlich PHP- oder Perl-Code sind.
Aber wenn ich den genauen Pfad zu dem Bild kenne, dann kann ich's doch auch direkt über die Adresszeile erreichen. Oder kann ich das abstellen? Aber für die Perl-Scripte sollte es ja schon noch erreichbar sein.
Zumindest sieht man den Inhalt der Verzeichnisse nicht aufgelistet, das ist doch schon mal was! :-)
Die Frage klingt jetzt vielleicht dumm, aber wie merk ich denn, ob das Bild beim Aufruf geparsed wird oder nicht?
Und außerdem, wenn ich doch den Dateinamen inkl. Endung festlege, dann kann man die Datei doch nicht ausführen, oder? Außer ich nenne das Bild 1234.cgi ?
beste Grüße
Kathrin
Hi,
Aber wenn ich den genauen Pfad zu dem Bild kenne, dann kann ich's doch auch direkt über die Adresszeile erreichen. Oder kann ich das abstellen?
Die Bilder außerhab der DOCUMENT_ROOT legen.
Aber für die Perl-Scripte sollte es ja schon noch erreichbar sein.
Serverseitige Scriptsprachen haben Zugriff auf Dateien außerhalb der DOCUMENT_ROOT.
Die Frage klingt jetzt vielleicht dumm, aber wie merk ich denn, ob das Bild beim Aufruf geparsed wird oder nicht?
Indem die Datei keine "Bilddaten" als Inhalt hat, sondern Scriptcode. Wenn der ausgeführt wird, wird geparst ... ;)
Und außerdem, wenn ich doch den Dateinamen inkl. Endung festlege, dann kann man die Datei doch nicht ausführen, oder? Außer ich nenne das Bild 1234.cgi ?
Man kann einem Server auch beibringen, Dateien mit der Endung .gif zu parsen. Oder die Datei hat Ausführungsrechte und wird dann deswegen geparst (sofern möglich).
Gruß, Cybaer
Hi!
Die Bilder außerhab der DOCUMENT_ROOT legen.
In document_root liegt nur die index.htm.
Die Bilder liegen in einem Unterverzeichnis.
Aber alles hängt doch von den Rechten ab, oder nicht?
Die hochgeladenen Bilder haben automatisch 640.
Das Verzeichnis in dem die Bilder liegen hat 710.
Wenn ich allerdings die Rechte des Verzeichnisses ändere (auf zB: 640) dann wird mir das Bild nicht mehr im Browser angezeigt!
Obwohl 640 doch lesen für alle erlaubt???
grübel, grübel...
Kathrin
Hi,
In document_root liegt nur die index.htm.
Die Bilder liegen in einem Unterverzeichnis.
Also innerhalb von DOCUMENT_ROOT.
Wenn Du die Bilder außerhalb legst, ist kein Zugriff von außen möglich.
Aber alles hängt doch von den Rechten ab, oder nicht?
"Alles" ist arg weitgefaßt. So weit, daß man eigentlich nur mit "nein" antworten kann. ;-)
Obwohl 640 doch lesen für alle erlaubt???
Nein. Gerade für "alle" ist nichts erlaubt - und der Webserver ist oft "alle".
Gruß, Cybaer
was meint ihr???
Ich meine, dass ohne Kenntnis der Verwendeten Software (Betriebssystem, Webserver etc.) keinerlei Aussage zu treffen ist. Ich denke, Hellseher gibt es hier nur wenige bis keine.
Hi,
Allerdings frag ich mich, ob das auch professionell ist!
Nein, ein Profi würde wohl eher die Daetiendung beibehalten (aus bereits genannten Gründen) und ggf. MultiViews oder Rewrite bemühen, um die Bilder auch ohne Endung zugänglich zu machen.
Gruß, Cybaer