在實際開發過程中,文件去重是一個常見需求,尤其是在存儲大量文件時,避免重複文件不僅節省空間,還能提高系統效率。 PHP 提供了一個非常方便的函數md5_file() ,可以幫助我們快速實現文件的哈希值計算,從而輕鬆判斷文件是否重複。
md5_file()是PHP 內置的函數,用於計算指定文件內容的MD5 散列值。其基本語法如下:
string md5_file(string $filename, bool $raw_output = false)
$filename :要計算的文件路徑。
$raw_output :是否以原始二進制格式輸出,默認是false ,返回32位16進製字符串。
該函數返回文件內容的唯一摘要,用來判斷兩個文件內容是否相同非常合適。
思路非常簡單:
遍歷目標文件夾中的所有文件。
對每個文件使用md5_file()計算哈希值。
用一個數組記錄已出現的哈希值。
如果某個文件的哈希值已經存在,則判定為重複文件,可以選擇刪除或跳過。
以下是示例代碼:
<?php
$directory = '/path/to/your/files'; // 文件目錄
$hashes = []; // 用於存儲文件的哈希值
// 遍歷目錄下所有文件
$files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($directory));
foreach ($files as $file) {
if ($file->isFile()) {
$filePath = $file->getRealPath();
$fileHash = md5_file($filePath); // 計算文件MD5
if (isset($hashes[$fileHash])) {
// 找到重複文件,進行處理,比如刪除
echo "重複文件: {$filePath} 已存在重複文件 {$hashes[$fileHash]}\n";
// unlink($filePath); // 若需要刪除,取消註釋此行
} else {
// 記錄新哈希
$hashes[$fileHash] = $filePath;
}
}
}
?>
分批處理:大目錄文件較多時,可以分批掃描,避免一次性佔用大量內存。
緩存哈希:對於常用目錄,可以將哈希結果緩存到數據庫或文件,下次直接讀取,提升效率。
替換算法:MD5 雖然效率高,但安全性較弱;如果對安全要求高,可考慮使用sha1_file()或hash_file() 。
PHP 官方文檔: md5_file()