我试图确定上传文件的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
,有没有办法可以使用{{1 }} 像这样?或者我是以完全不正当的方式解决这个问题。使用我直接在另一个文件中预先设置的文件,并设置$_FILE
正常工作。
答案 0 :(得分:23)
您应该将路径传递给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);
}
?>
答案 1 :(得分:0)
我使用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()
扩展程序。 for linux extension=fileinfo
。并在Windows中:php_fileinfo.dll
你可以拥有一组已接受的mime类型,然后检查它是否存在于该数组中
$acceptedMime = [];
if(in_array($mimetype, $acceptedMime, true) === true){
#mime type is valid. Proceed!
}
避免必须检查mime类型的另一种方法是将文件上传完全存储在文档根文件夹之外。
答案 2 :(得分:-1)
我知道这有点旧,但由于您使用的是$_FILES
超级全局,您可以使用文件数组的类型键(即{{1一旦文件上传,而不是让服务器检查?