5

ビデオをアップロードするためのページがあり、ファイルタイプをmp4フラッシュファイルとwebmファイルにします。すべてのmp4拡張子ファイルとwebmファイルは正常に機能しますが、フラッシュファイル(.flvと.f4v)は認識されないため、phpは値「application/octet-stream」を返します。 tが認識されました。真のMIMES(video/x-flvとvideo/x-f4v)のフラッシュファイルをそれぞれ認識するこのコードよりも優れた方法はありますか?

$type   = $_FILES["uploaded"]["type"];
$allowedTypes  = ["video/mp4","video/quicktime","video/x-flv","video/x- f4v",  
                 "video/webm"];
$isRefusedType = !in_array($type, $allowedTypes);


if ($isRefusedType)
 {
   $message="not an accepted file type";
 }
    else $message="OK";
4

2 に答える 2

2

おそらくあなたはこのコードを試すことができます:

<?php
    $finfo = finfo_open(FILEINFO_MIME_TYPE); // mimetype
    $type  = finfo_file($finfo, $filename);
    finfo_close($finfo);
?>

ここで説明するように、PHP> = 5.3.0が必要になりますが、問題はありますか?

別のアイデアは、データ署名をチェックすることです(そこを参照):

<?php
    $s = file_get_contents($_FILES["uploaded"]["tmp_name"]);
    if ( substr($s,0,3) == 'FLV' ) { /* It's good! */ } 
?>
于 2012-12-21T14:35:44.040 に答える
2

phpドキュメントの$_FILES['userfile'] ['type']の説明を見ると、次のことがわかります。

ブラウザがこの情報を提供した場合は、ファイルのmimeタイプ。例は「image/gif」です。ただし、このmimeタイプはPHP側でチェックされないため、その値を当然のこととは見なしません。

したがって、Tiger-222オプションは、真の価値を得る最良のチャンスのようです。

<?php
    $finfo = finfo_open();
    $fileinfo = finfo_file($finfo, $file, FILEINFO_MIME);
    finfo_close($finfo);
?>
于 2012-12-21T14:45:05.977 に答える