2009-12-01 160 views
3

有人可以指導我如何檢查以確定文件是否已經存在於數據庫中或沒有上傳之前?php檢查文件是否存在

我想上傳一個文件到數據庫中,但在保存之前,我想先檢查文件是否已經存在。如果是,那麼不要執行插入操作。

我使用這個reference上傳文件。

非常感謝。

+2

你如何在數據庫中存儲文件?什麼標準會表明文件已經存在?文件名?文件大小?文件本身的二進制差異? – 2009-12-01 20:06:18

+0

存儲文件名n filesize..thx – user147685 2009-12-05 02:33:38

回答

18

我不確定這是你問的問題,但你有使用PHP內置函數file_exists(ABSOLUTE-PATH-TO-FILE)嗎?

$exists = file_exists('myfile.doc'); 
if(!$exists) { 
// do your processing 
} 

http://php.net/manual/en/function.file-exists.php

如果您正在檢查的數據庫,那麼就查詢任何列可能會牽着你的文件,例如:

SELECT * FROM my-table WHERE my-column = 'my-uploaded-file-name'; 
+0

所以,你檢查它是否存在不正確?只是要確定.. – Syno 2017-02-27 13:12:06

2

從您鏈接到文章,文件評審在執行該查詢時被視爲「已上傳到數據庫」:

$query = "INSERT INTO upload (name, size, type, content) ". 
"VALUES ('$fileName', '$fileSize', '$fileType', '$content')"; 

這意味着一種檢查文件「已上傳到數據庫」的方法是在文件上傳時檢查數據庫中是否有相同的名稱,文件,類型和內容那當前的那個。

我想這樣的條目可以使用查詢像這樣一個被取出:

select * 
from upload 
where name = '$fileName' 
    and size = '$fileSize' 
    and type = '$fileType' 
    and content = '$content' 

如果查詢返回的結果,您的文件可能已經是「數據庫」。


BTW:爲了避免檢查整個文件的內容,解決方案可能是一個新列添加到您的上傳表,用於存儲某種文件的哈希值(見md5和/或sha1爲實例)


BTW 2:你應該讀一些關於SQL Injections,使用並沒有真正理解它在這篇文章中介紹的代碼之前:下面的代碼部分,複製/粘貼「代碼下載文件」節,是相當可怕的,例如:

$id = $_GET['id']; 
$query = "SELECT name, type, size, content " . 
     "FROM upload WHERE id = '$id'";