如何检查上传的文件是否是PHP中的SQLite格式文件?

如何检查上传的文件是否是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

我想做的是一个小网页,用户可以上传一个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文件,$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类型。