2017-06-18 60 views
0

我想要做的是用戶可以上傳SQLite文件的小型網頁,但是我想避免那些不是SQLite格式的上傳,所以我在執行「move_uploaded_file」之前嘗試驗證它。上面有一個我嘗試過的例子,但它不起作用。如何檢查上傳的文件是否是PHP中的SQLite格式文件?

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 = 0也表示文件不正常,但大於0的任何值都表示它是有效的SQLite文件。 問題是,當我測試此代碼手動插入$ filedir的路徑時,例如本機中已存在的文件時,輸出是正確的。但是,當我嘗試驗證「$ _FILES ['upload_file'] ['tmp_name']」它不起作用,並且頁面崩潰。

我是網絡編程的新手,特別是在PHP中,所以我認爲可能存在對$ _FILE變量的誤解。

回答

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 
} 
+0

不幸的是,它沒有工作。 $ mime的輸出實際上是「application/octet-stream」,當我嘗試上傳一個SQLite文件時,我猜測這是默認的文件格式的MIME類型。 – Vinicius

相關問題