2011-07-27 13 views
0

私はUploadifyKohanaを使用しています。ファイルアップローダを作成しています。ユーザーは少数の種類のファイルしかアップロードできません。MIME、オクテットストリーム、アップロードファイル

Kohanaには、MIMEタイプの素晴らしいライブラリが組み込まれています。アップロードされたファイル(Uploadifyから来たもの)のMIMEタイプが、設定されたファイル拡張子と一致しているかどうかチェックするのはクールだと思いました。だから私は許可されたMIMEタイプの配列を作ったのです。

$mimes   = (array) Kohana::config('mimes'); 
$allowed_mimes = array_merge($mimes['bmp'], $mimes['gif'], $mimes['jpg'], $mimes['jpeg'], $mimes['png']); 

次に、私は、アップロードされたファイルのMIMEタイプは$allowed_mimes配列になっていることを確認したかったです。私はin_array($file['type'], $allowed_mimes)のようなものを使用しました。私には驚きのため、ファイルの実際のMIMEはapplication/octet-streamでした。とにかく、アップロードされたファイルはJPEGでした。これはどのように可能ですか?

基本的な考え方は、ファイルの種類を確認する必要があるということです。それを行う最善の方法は何ですか?

編集:私の同僚といくつかの変換後

、私は最後のドットの後に文字を確認することを決めました。 virus.jpegのように、jpegという名前が付いています。私はまだ良いソリューションのために開いている!

$extension = ltrim(strrchr($file['name'], '.'), '.')

+0

$ ext = pathinfo($ filename、PATHINFO_EXTENSION); '拡張子を取得する適切な方法でしょうか(私は元の質問を理解できませんか?) – Kemo

+0

質問:ファイルの種類を確認するには? MIMEは大丈夫ですか?私は 'application/octet-stream'と' JPEG'をどうやって入手したのでしょうか?私の解決策(編集を参照)は大丈夫ですか? – daGrevis

答えて

3

PHPファイルを決定するために(PHP 5.3.0から除去された)fileinfoMIME Magicを使用することができMIMEタイプを(したがってKohanasんがFile::mime()法)。

これらの2つのうちどれも利用できない場合、このメソッドはファイルの拡張子を使用してMIMEタイプを見つけようとしますが、これは非常に信頼性が低い場合があります。

あなたが唯一のいくつかのアップロードを検証しようとしているので、私はそれを検証するためにUploadメソッドを使用してお勧めは:Upload::image()は3.2.0以降で使用可能であることを

$validation = Validation::factory($_FILES) 
    ->rule('Filedata', 'Upload::not_empty') 
    ->rule('Filedata', 'Upload::valid') 
    ->rule('Filedata', 'Upload::size', array(':value', '4M')) 
    ->rule('Filedata', 'Upload::type', array(':value', array('bmp','jpg','jpeg','png'))) 
    ->rule('Filedata', 'Upload::image', array(':value', 1920, 1080)); 

お知らせ(あなたに古いバージョンにインポートすることができますよく)。これは私が個人的にUploadifyアップロード用に使っている検証なので、うまくいくはずです。

関連する問題