2013-12-19 97 views
1

我有一個php腳本,它將文件夾中的每個文件的文件名保存到文本文件中。然後該文本文件被哈希。這裏是我的腳本中的行:如何檢查文件哈希值是否發生了變化用PHP

$allnames = implode(",", $fileslist); 

file_put_contents($post_dir . "/md5file.txt",$allnames); 

$md5file = md5_file($post_dir . "/md5file.txt"); 

echo $md5file; 

如果新文件上傳,刪除,或文件名被改變,那麼散列會改變。我需要一種方法來檢查並查看散列是否已更改。

+1

然後保存散列並檢查它? – kero

+0

單獨更改文件名不應該改變md5,因爲它是文件系統條目的一部分,而不是文件本身。 – Powerlord

+0

@Powerlord:在這個特定的情況下,md5會改變,因爲文件內容會隨着其他文件名稱的改變而改變。 – Stoic

回答

2

一個骯髒的方式(不使用數據庫)將是:

$allnames = implode(",", $fileslist); 
file_put_contents($post_dir . "/md5file.txt",$allnames); 
$md5file = md5_file($post_dir . "/md5file.txt"); 
$last_hash = file_get_contents($post_dir . "/last_hash.txt"); 

if ($md5file != $last_hash) { 
    // save the new hash 
    file_out_contents($post_dir . "/last_hash.txt", $md5file); 
    // some file may have been added, removed or rename 
    // do something.. 
} else { 
    // no files has been added, removed or renamed, since last change. 
    // do something.. 
} 

基本上,我存儲當前散列到一個特定的文件,並讀取下一個迭代這個文件。如果散列已經改變,我將新的散列存儲到這個文件以供稍後比較,並且瞧!

請注意,如果您正在使用一個,則可以在數據庫上執行相同的操作。

+0

完美,謝謝! – user715564

0

2點的可能性沒有DB:

  • 進行第二次文件並保存最後的文件名在它和比較反對。
  • 將文件大小包含到文件名或文件頭中,並檢查文件大小是否已更改。
相關問題