當前位置: 首頁> 最新文章列表> 如何記錄所有文件的md5_file() 值到日誌中

如何記錄所有文件的md5_file() 值到日誌中

M66 2025-05-31

在PHP中, md5_file()函數是一個非常方便的工具,它可以直接計算指定文件的MD5哈希值,常用於文件完整性校驗。本文將介紹如何使用md5_file()函數遍歷某個目錄下的所有文件,並將它們的MD5哈希值記錄到日誌文件中。


1. md5_file()函數簡介

md5_file(string $filename): string|false

  • 參數$filename :要計算MD5的文件路徑。

  • 返回值:文件的MD5哈希字符串,如果失敗返回false

示例:

 $hash = md5_file('path/to/file.txt');
echo $hash;

2. 實現思路

  1. 使用PHP的遞歸目錄遍歷函數(如RecursiveDirectoryIterator )獲取所有文件路徑。

  2. 對每個文件調用md5_file()函數獲取哈希值。

  3. 將文件路徑及對應的MD5值寫入日誌文件。


3. 代碼示例

<?php
// 要遍歷的目錄路徑
$directory = '/path/to/your/directory';

// 日誌文件路徑
$logFile = '/path/to/your/logfile.log';

// 打開日誌文件,追加寫入
$logHandle = fopen($logFile, 'a');
if (!$logHandle) {
    die("无法打開日誌文件\n");
}

// 遞歸遍歷目錄
$iterator = new RecursiveIteratorIterator(
    new RecursiveDirectoryIterator($directory, RecursiveDirectoryIterator::SKIP_DOTS)
);

foreach ($iterator as $file) {
    if ($file->isFile()) {
        $filePath = $file->getPathname();
        // 計算文件的MD5哈希值
        $hash = md5_file($filePath);
        if ($hash !== false) {
            // 寫入日誌格式:文件路徑 + MD5值
            $logLine = $filePath . ' : ' . $hash . PHP_EOL;
            fwrite($logHandle, $logLine);
        } else {
            // 記錄錯誤信息
            $logLine = $filePath . " : 無法計算MD5值" . PHP_EOL;
            fwrite($logHandle, $logLine);
        }
    }
}

fclose($logHandle);

echo "所有文件的MD5值已記錄到日誌中。\n";
?>

4. 說明

  • 請確保PHP腳本對指定的目錄和日誌文件具有讀取和寫入權限。

  • 為避免日誌文件過大,可以定期清理或者將日誌文件按日期拆分。

  • 如果想輸出的文件路徑中包含URL,可以替換域名部分,例如將https://example.com/path/file.jpg替換為https://m66.net/path/file.jpg

例如: