2011-03-04 14 views
0

私はすべてのユーザープロフィール写真を保存したいWebアプリ内のディレクトリを持っています。ユーザーはすべてのタイプの画像(png、jpg、gif)をアップロードできます。しかし、画像のURLを友好的にしたい、例えば。 http://example.com/static/picture/300-username、ファイルは300-usernameですが、拡張子はありません。ユーザーがアップロードしたときに拡張子を削除し、PHPコントローラを使用して、次のように追加することを考えました:拡張子のないブラウザで画像を表示

header('Content-Type: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, image/png'); 
readfile('http://example.com/static/picture/300-username'); 

これはうまくいきました。しかし、このディレクトリで.htaccessファイルを配置し、このディレクトリに読み込まれたファイルが何らかのヘッダで、ピクチャとして表示されるようにすることができれば、私は思っていました。これは可能ですか?

+5

これは 'Content-Type'ではありません。 – SLaks

+0

ファイルを拡張子なしでサーバーに保存していますか? – drudge

+0

このようなContent-typeを実装することの挫折は何ですか?それは機能します...私は拡張子なしでそれを保存するので、私はそれがどの拡張子であるかを検出する必要はありません。 – Samin

答えて

5

しないでください拡張子を削除して、/static/picture/300-usernameのような拡張子のないURIを提供するだけです。次に、.htaccessに行を追加します。

Options +MultiViews 

Apacheは正しいコンテンツタイプを設定します。 Content Negotiationのドキュメントを参照してください。

+0

恐ろしい!私が期待したよりも優れています。 – Samin

0

まず、あなたのパスは物理的に存在する必要があります。そうでなければ、Apacheはあなたのために何もできないと思います。

ただし、ここではRewriteRuleを使用して回避策を講じることがあります(ただし、ファイルの拡張子を削除すると、特に平文ファイルではないと思われます)。 300-usernameのように書き換えて300-username.jpgに書き換えます。あなたが..あなたは、各画像の正しいヘッダを渡す必要があり、そのような複数のContent-Typeを指定することはできません

+0

拡張機能を使用している場合、ModRewriteでどの拡張機能を検出するのですか? – Samin

1

を務め:

<?php 
    $user = '300-username'; 
    $picture = 'http://example.com/static/picture/' . $user; 
    $info = getimagesize($picture); 
    $fp = fopen($picture, "rb"); 
    if ($info && $fp) { 
     header("Content-type: {$info['mime']}"); 
     fpassthru($fp); 
     exit; 
    } else { 
     // error 
    } 
?> 

(コードはPHPのgetimagesize()ドキュメントから適応。)

関連する問題