2011-10-20 9 views
2

flvファイルのファイルタイプをphpで確認できません。ここに私のコード

if($_FILES["file"]["type"] == "video/x-flv") 
{ echo "true"; } 
else{ echo "false"; } 

だ。しかし、私の問題は、私はFLVファイルをアップロードするときには、他の文になって...私は問題を把握することができないんだということです。..助けてください..

EDITED- > それはイメージのため正常に動作している間..だけでなく

($_FILES["file"]["type"] == "application/x-shockwave-flash") 

ために同じ問題を抱えて

+2

あなたが 'echo $ _FILES ['file'] ['type']'を実行すると、それは何と言いますか? – Griffin

+1

この '$ _FILES [" file "] [" type "]'出力するものは? – JellyBelly

+2

アレイをダンプし、設定されている実際の値が何であるかを確認します。基本的なデバッグ。 –

答えて

2

使用finfo_file();

おそらく、ファイル自体は有効なFLVファイルではありません

$finfo = finfo_open(FILEINFO_MIME_TYPE); 
if (finfo_file($finfo, $filename) == "video/x-flv"){} 

を試してみてください。

が編集されました。

+0

この関数は非推奨で、 'magic.mime'を使用しているので、出力はサーバーごとに異なる場合があります。 – dresende

+0

@dresende編集 – Mob

+0

それは良いです:)しかしそれはPECL/PHP> = 5.3.0に依存します。しかし、可能であれば、ファイルの拡張子を確認するよりも優れています。 – dresende

1

第1:確かに$_FILES["file"]["error"]はゼロですか?そうでない場合はError Messages Explainedにチェックしてください。通常、最も一般的なエラーはアップロードページのformタグにenctype="multipart/form-data"が含まれていないことです。

第2:決して信頼しない$_FILES["file"]["type"]。これはブラウザによって与えられます。ファイル名の拡張子を確認することができます。

if (strtoupper(substr($_FILES["file"]["name"], -4)) == ".FLV") { 
    ... 
} 
+1

ファイルの拡張子をテストするのは悪い考えです。ファイル?fi le_is_validは有効ですが、期待する拡張子はありませんか? – megaflop

+0

はい$ _FILES ["file"] ["error"]は0です。 – ravi404

+0

@daiscog:私たちは精度について話しています。 MIMEタイプはすべて標準ではありません。少なくとも、拡張機能は同じです(もちろん、非ウィンドウ上でそれらを削除しても、それらを正しく開くことができます)。上記の答えのコメントに見られるように、 'finfo()'は常に利用可能なわけではありません。 – dresende

1

テストファイル名の拡張子$_FILES["file"]["type"]を信頼するのと同じくらい安全ではない - 彼らは、両方のクライアント側で設定されています。唯一の信頼できるソリューションはfileinfoです。

1

gettype()またはfinfo関数を使用してファイルの種類を取得できます。

関連する問題