好的,所以我创建了一个网站,让用户可以将要扫描的csv文件上传到mySQL-databse。因为我不想让邪恶的人冒险上传可能弄乱我的数据库的奇怪文件,我猜测检查文件的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类型:(我该怎么做才能解决这个问题?
答案 0 :(得分:0)
finfo_file可以并且将返回空字符串,如果找不到类型,则返回FALSE。
这里的mime类型有问题,你也不能信任它们。
之前我做过这个并用fgetcsv解析文件。那里有任何错误,我放弃了文件。这样你可以确定它是有效的csv。
当您插入数据库时,请确保执行正确的转义或使用预准备语句。