使用php检查通过表单上传的文件的MIME类型


Using php to check MIME type of file uploaded via form

好的,所以我正在创建一个网站,让用户上传csv文件,将被扫描到mysql数据库。因为我不想冒险,坏人上传奇怪的文件,可以扰乱我的数据库,我猜这是一个好主意,检查文件的mime类型。从其他线程中我了解到,正确做到这一点的唯一方法是使用finfo()。但我没能成功。我的uploadfile.php中的以下代码只是打印出临时文件名后跟"hello"。

$filename = $_FILES["file"]["temp_name"];
echo $filename;
if (function_exists('finfo_open')&&$mode==0) {
$finfo = finfo_open(FILEINFO_MIME_TYPE); 
echo finfo_file($finfo,$filename);
finfo_close($finfo); 
echo "hello";
}

所以我知道文件上传正确,我知道函数存在,我知道整个if子句没有错误。那为什么行不通呢?我正在通过MAMP测试这个,我认为可能有一些错误?虽然它有PHP版本5.4.4.

我也尝试过不同的版本,如:

$mimetype = finfo_file($finfo,$filename); 
echo $mimetype;

但是什么都没用。它从不打印任何mime类型:(我能做些什么来解决这个问题?

finfo_file可以并且将返回空字符串,如果没有找到类型则返回FALSE。

这里mime类型的问题是,你也不能信任它们。

我以前这样做过,并使用fgetcsv解析文件。如果有任何错误,我就放弃这个文件。这样您就可以确定它是有效的csv。

当您插入到数据库中时,请确保您做了正确的转义或使用准备好的语句。