5

我有一个上传视频的页面,我希望文件类型是 mp4 flash 和 webm 文件。所有 mp4 扩展文件和 webm 文件都可以正常工作,但无法识别 flash 文件(.flv 和 .f4v),因此 php 返回值“application/octet-stream”,我认为这是任何文件的默认 MIME t 认可。有没有比这段代码更好的方法来分别识别真正的 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";
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 回答