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

时间:2017-06-18 23:05:18

标签: php sqlite

我想要做的是一个用户可以上传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变量的误解。

1 个答案:

答案 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
}