我正在尝试确定上传文件的mime类型,我想使用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"
可以正常工作。
您应该传递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);
}
?>
我使用finfo()
buffer()
函数以及来自php平台的file_get_contents()
,如下所示
$finfo = new finfo(FILEINFO_MIME);
$mimetype = $finfo->buffer(file_get_contents($filename)); #gives you mime type
您需要使用php 5.3
或更高版本,并确保安装了finfo()
扩展。对于linux extension=fileinfo
。在窗口中:php_fileinfo.dll
你可以有一个可接受的mime类型的数组,然后检查它是否存在于该数组中
$acceptedMime = [];
if(in_array($mimetype, $acceptedMime, true) === true){
#mime type is valid. Proceed!
}
避免检查mime类型的另一种选择是将文件上传完全存储在文档根文件夹之外。
我知道这有点旧,但由于您使用的是$_FILES
超级全局,您是否可以使用文件数组(即$_FILES['soup']['type']
)的type键,而不是在文件上传后让服务器检查?