我有一个上传视频的页面,我希望文件类型是mp4 flash和webm文件。所有的mp4扩展文件和webm文件工作正常,但flash文件(.flv和.f4v)无法识别,因此php返回值'application / octet-stream',我认为这是任何文件的默认MIME认识到了。有没有比这个代码更好的方法来识别真正的MIMES(video / x-flv和video / x-f4v)的flash文件?
$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";
答案 0 :(得分:2)
也许你可以试试这段代码:
<?php
$finfo = finfo_open(FILEINFO_MIME_TYPE); // mimetype
$type = finfo_file($finfo, $filename);
finfo_close($finfo);
?>
正如here所述,你需要PHP&gt; = 5.3.0,这是一个问题吗?
另一个想法可能是检查数据签名(请参阅there):
<?php
$s = file_get_contents($_FILES["uploaded"]["tmp_name"]);
if ( substr($s,0,3) == 'FLV' ) { /* It's good! */ }
?>
答案 1 :(得分:2)
在php文档中看到$ _FILES ['userfile'] ['type']的描述,我们可以看到:
文件的mime类型,如果浏览器提供此信息。 一个例子是“image / gif”。但是,不检查这种哑剧类型 在PHP方面,因此不要将其值视为理所当然。
所以Tiger-222选项似乎是获得真正价值的最佳机会:
<?php
$finfo = finfo_open();
$fileinfo = finfo_file($finfo, $file, FILEINFO_MIME);
finfo_close($finfo);
?>