如何检查上传的文件是否是PHP中的SQLite格式文件?
我想做的是一个小网页,用户可以上传一个SQLite文件,但我想避免那些不是SQLite格式的上传,所以我尝试在执行“move_uploaded_file”之前验证它。上面有一个我尝试过的例子,但它不起作用如何检查上传的文件是否是PHP中的SQLite格式文件?,php,sqlite,Php,Sqlite,我想做的是一个小网页,用户可以上传一个SQLite文件,但我想避免那些不是SQLite格式的上传,所以我尝试在执行“move_uploaded_file”之前验证它。上面有一个我尝试过的例子,但它不起作用 function isFileOkay($filedir) { try { $db = new PDO("sqlite:".$filedir); $sql = "PRAGMA schema_version;"; $ret = $db->query($s
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文件,$test变量应该是“-1”,或者$value$value=0还表示该文件不正常,但任何大于0的值都表示它是有效的SQLite文件。
关键是,当我测试这段代码时,手动插入$filedir的路径,例如,这台机器中已经存在的文件,输出是正确的。但是,当我尝试验证“$\u文件['upload\u file']['tmp\u name']”时,它不起作用,页面崩溃
我不熟悉网络编程,尤其是PHP,因此我认为可能对$\u FILE变量有误解。您应该能够检查上传文件的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
}
不幸的是,它不起作用。$mime的输出实际上是“application/octet stream”,当我尝试上载SQLite文件时,我猜这是那些无法识别的文件格式的默认mime类型。