当前位置: 首页> 最新文章列表> 如何记录所有文件的 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

例如: