2011-02-24 9 views
28

可能性の重複:
Is it safe to serve an image on the web without an extension?<img>に画像を拡張子なしで使用できますか?

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

EDIT

私はもののすべての種類を試してみたし、それはまだ動作しません。私は今、ファイルの拡張子を正確に入れます(例えば、Flashの場合は.swf)。ディレクトリなどを変更しました。私がfile_exists()と呼んだとき、ファイルはそこにありますが、幸いですが、私は絶対にページにレンダリングすることができません。これは、imgタグの.PNGまたはFlashオブジェクトのいずれかです。どちらも動作しません。私が間違っていること:-( また、アップロードされていないファイルの名前をスクリプトが探しているファイルに変更すると、正常に動作しますが、アップロードされたファイルはアップロードされません。

+2

ん "広告/ 12は" それは、画像の種類のための右の 'のContent-type'がHTTPヘッダを送信?ブラウザが拡張機能を気にしているとは思えません。 –

+0

はい、できます。ユーザーがファイルシステムにイメージを保存することを決断した場合、これはユーザーに迷惑をかけることに注意してください。 –

答えて

25

はい、できるはずです。

ブラウザは、最初にファイル名を調べません。HTTPサーバーからの応答のContent-typeヘッダーにリストされているMIMEタイプを参照します。コンテンツの種類がimage/jpeg、またはpngまたはgifなどであれば、状況は良好で、イメージをうまく表現できます。

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

Firefox/Firebirdの初期段階では、MIMEタイプが厳しく、有効なMIMEタイプのないものをレンダリングすることを拒否していたため、以前はFirefox/Firebirdの初期段階に戻っていました。 IEは推測を行い、多くの厄介なWebサーバーはIEでうまく表示されるページを提供しますが、他のページには表示されません。しかし、最近は物事がはるかに優れています。

imgオブジェクトが要求されたときにWebサーバーが適切なMIMEタイプを提供している限り、あなたはうまくいくでしょう。問題がある場合は、「広告/ 12」が要求されたときにWebサーバーが何をしているかを確認してください。

+2

302リダイレクトはこれに収まります(img srcがイメージにリダイレクトする場合)? – jbyrd

2

MIMEタイプ理論的に正しいものを提供しているはずですが、イメージを提供する特殊なPHPスクリプトなどの場合は、HTTP Content-Typeヘッダーを適切なMIMEタイプに設定する必要があります。

あなたが<img>タグを使用しないようにしたい場合は、CSSの背景を持つ接続詞で<div>を使用することができますが、それはブラウザが任意の既知の画像タイプとしてadvertisements/12を認識しない場合に役立つことはないだろう。

+0

これは単にディスクに保存された画像です。ファイルブラウザ(Nautilus)でmimeの種類は問題ありません – Bojangles

+1

画像が実際に配信されたときに表示されるMIMEタイプを確認してください。 Apacheやそれに類する人は、純粋に拡張子に基づいて決定することが多く、MIMEタイプがない場合は、MIMEタイプをデフォルトにします。イメージに拡張子を与えて、どこにでもあなたがいるかどうか確認してください。そうであれば、あなたはそのファイルをどんなタイプでも認識できるように、Apacheに強制する方法を見つけなければなりません。 – digitlworld

9

サーバーは何を返すのですか?ファイル拡張子は実際には何にも使われていません。ブラウザでContent-typeヘッダーがチェックされています(image/jpegなど)。

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

+0

私の以前の答えは、あなたが提供しているファイルに認識された拡張子がない場合、サーバ自体が必ずヘッダを正しく設定するとは限らないということでした。ファイルを読んで、それが何であるかを調べるつもりはありません。 – digitlworld

+0

@Digitlworld:True、通常のファイルの場合、Webサーバーはそのようなことを処理します。このようなカスタムコンテンツの場合、ヘッダーを提供するようにサーバーを構成するか、サーバー上で実行されているアプリケーションが手動で行う必要があります。 (私は通常、自分の設定で後者を好む)もちろん、質問はそれで実行されているアプリケーションフレームワークのサーバーに関する情報を指定していません。 – David

+0

サーバーはPHP5でApache2を実行しています。ファイルは実際には標準イメージまたはFlash(.SWF)ファイルです。彼らは単に拡張子を持たない(しなかった)。 – Bojangles

1

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

私がやったことは、アップロードされたファイルを処理する際に通常は$ _FILES配列内にあるMIMEタイプをチェックし、ファイル名に関連する拡張子を追加することでした。私のブラウザは、ファイル名拡張子なしのバイナリファイルとしての私のイメージをダウンロードしようとしていたとして、私の問題を解決しなかった--Which

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'; 
} 

List of common image mime types.

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

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

関連する問題