Finfo_file上传的文件以确定哑剧类型

2022-08-30 22:02:54

我试图确定上传文件的哑剧类型,我想使用fileinfo(),这是我一直在尝试的,它不起作用:

$uploadedfile = $_FILES['soup']['tmp_name'];
if(isset($uploadedfile))
{
    $uploadedname = $_FILES['soup']['name'];
    $file=$uploadedsong;
    $file.=$uploadedname;
    $finfo = finfo_open(FILEINFO_MIME_TYPE); 
    $mime = finfo_file($finfo, $file);

不幸的是,似乎没有运行,我假设我有以下设置不正确,有没有办法使用像这样使用新上传的文件正确执行此操作?还是我以完全不恰当的方式解决这个问题。使用我直接在另一个文件中预设的文件,并且设置正常工作。finfo_file$file$_FILE$file="folder/file.doc"


答案 1

您应该将路径传递给finfo_file函数,而不是文件名。

<?php 
if (isset($_FILES['soup']['tmp_name'])) {
    $finfo = finfo_open(FILEINFO_MIME_TYPE);
    $mime = finfo_file($finfo, $_FILES['soup']['tmp_name']);
    if ($mime == 'application/msword') {
        //Its a doc format do something
    }
    finfo_close($finfo);
}
?>

答案 2

我使用该函数以及从php平台如下finfo()buffer()file_get_contents()

$finfo = new finfo(FILEINFO_MIME);
$mimetype = $finfo->buffer(file_get_contents($filename)); #gives you mime type

您需要处于打开或更高状态,并确保已安装扩展程序。对于 linux .和在窗口中:php 5.3finfo()extension=fileinfophp_fileinfo.dll

您可以拥有一个已接受的哑剧类型的数组,然后检查该数组中是否存在

$acceptedMime = [];
if(in_array($mimetype, $acceptedMime, true) === true){
  #mime type is valid. Proceed!
}

避免必须检查哑剧类型的另一种方法是将文件上传完全存储在文档根文件夹中。


推荐