web-dev-qa-db-ja.com

<img>で拡張子なしの画像を使用できますか?

可能性のある複製:
拡張子なしでWeb上の画像を提供しても安全ですか?

ページで_<img src="advertisements/12" style="border: 1px solid">_のようなものを使用したいと思います。 FireFoxでは表示されないため、ファイルのファイル拡張子が必要だと思います。私はここにいますか(他のブラウザについても)、FFはMIMEタイプを好きですか

[〜#〜]編集[〜#〜]

私はあらゆる種類のものを試しましたが、それでもまだうまくいきません。これで、ファイルに拡張子を正しく付けました(Flashの場合は.swfなど)。ディレクトリなどを変更しました。file_exists()を呼び出すと、ファイルは存在しますが、すべて満足ですが、ページに表示することはできません。 imgタグ内の.PNG、またはFlashオブジェクトのいずれかです。どちらも機能しません。何が問題なのですか:-(また、アップロードされていないファイルの名前を、スクリプトが探しているファイルに変更すると、正常に機能しますが、アップロードされたファイルは機能しません...

34
Bojangles

はい、できるはずです。

ブラウザは最初はファイル名を調べず、HTTPサーバーからの応答のContent-typeヘッダーにリストされているMIMEタイプを調べます。コンテンツタイプがimage/jpeg、png、gifなどである場合、問題はなく、画像を適切にレンダリングします。

有効なMIMEタイプがない場合、一部のブラウザはタイプが何であるかを推測しようとします。彼らはリクエストされているオブジェクトの拡張子を見るか、最初の数バイトを見るでしょう。それが失敗した場合は、redexを取得します。

これは、Firefox/Firebirdの初期の頃には問題を引き起こしていました。なぜなら、それはMIMEタイプについて厳格であり、有効なMIMEタイプなしで何かをレンダリングすることをしばしば拒否したためです。 IE推測したところ、非常に多くのずさんなWebサーバーがIEで正常にレンダリングできるページを提供しますが、他のWebサーバーでは提供しません。しかし、最近では、状況はずっと良くなっています。

したがって、imgオブジェクトが要求されたときにWebサーバーが適切なMIMEタイプを提供している限り、問題ありません。問題がある場合は、「advertisements/12」が要求されたときにWebサーバーが実行していることを確認してください。

31
whatsisname

サーバーは何を返しますか?ファイル拡張子は、実際には何にも使用されていません。ブラウザはContent-typeヘッダーをチェックしています。これはimage/jpegのようなものであるか、または提供している画像のタイプである必要があります。

これは、データベースから画像を動的に提供するサイトでよく使用されます。 image.aspx?id=37のような画像のURLをたくさん見ましたが、技術的には「拡張子」が付いていても、それが画像であることを意味しているわけではありません。それはすべてHTTPヘッダー値にあります。

9
David

サーバーは理論的には正しいMIMEタイプを提供するはずですが、MIMEタイプを提供すると役立つ場合があります。画像を提供している特殊なPHP(または類似の)スクリプトである場合は、HTTP Content-Typeヘッダーを適切なMIMEタイプに設定する必要があります。

<img>タグの使用を避けたい場合は、CSS背景と組み合わせて<div>を使用できますが、ブラウザがadvertisements/12を既知の画像として認識しない場合は役に立ちませんタイプ。

2
digitlworld

Webフォームからアップロードした画像の名前を変更した後、同様の画像表示の問題が発生しました。 gif、jpg、jpeg、またはpngファイルを混在させることができるので、ファイルのプロパティを調べました。

私がやったことは、MIMEタイプ(通常、アップロードされたファイルの処理中に$ _FILES配列内にある)をチェックし、関連する拡張子をファイル名に追加することでした。

if($_FILES[$fieldname]['type'][$key]=='image/gif') {
     $ext='.gif';
}

if($_FILES[$fieldname]['type'][$key]=='image/jpeg') {
     $ext='.jpg';
}

if($_FILES[$fieldname]['type'][$key]=='image/pjpeg') {
     $ext='.jpg';
}

if($_FILES[$fieldname]['type'][$key]=='image/png') {
     $ext='.png';
}

一般的な画像のMIMEタイプのリスト。

-ブラウザがファイル名拡張子なしのバイナリファイルとして画像をダウンロードしようとしたため、どちらが私の問題を修正しましたか。

サーバー-Debian、Apache 2.2、PHP 5.3

Webクライアント-Kubuntu 11.10、Firefox

1
BradChesney79