我想要做的是一个用户可以上传SQLite文件的小网页,但我想避免那些不是SQLite格式的上传,所以我尝试在执行“move_uploaded_file”之前验证它。上面是我试图做的一个例子,但它不起作用。
function isFileOkay($filedir) {
try
{
$db = new PDO("sqlite:".$filedir);
$sql = "PRAGMA schema_version;";
$ret = $db->query($sql);
if(!$ret)
{
$db = NULL;
return -1;
}
$row = $ret->fetchAll(PDO::FETCH_BOTH);
$value = (int) $row[0]['schema_version'];
$db = NULL;
return $value;
}
catch (PDOException $exception) {
echo $exception->getMessage();
return -1;
}
}
...
$test = isFileOkay($_FILES['upload_file']['tmp_name']);
...
如果文件不是SQLite文件或$ value,则$ test变量应为“-1”。 $ value = 0也表示文件不正常,但任何大于0的值表示它是有效的SQLite文件。 关键是当我测试此代码手动插入$ filedir的路径时,例如本机中已存在的文件,输出是正确的。但是,当我尝试验证“$ _FILES ['upload_file'] ['tmp_name']”它不起作用,页面崩溃。
我是网络编程的新手,特别是在PHP中,所以我认为可能存在对$ _FILE变量的误解。
答案 0 :(得分:0)
您应该能够检查上传文件的mime类型:
$finfo = new finfo(FILEINFO_MIME_TYPE);
$mime = $finfo->file($_FILES['upload_file']['tmp_name']);
// SQLite is application/x-sqlite3
if ($mime == 'application/x-sqlite3') {
// Is SQLite
} else {
// Is something else
}