在PHP中,md5_file()函数是一个非常方便的工具,它可以直接计算指定文件的MD5哈希值,常用于文件完整性校验。本文将介绍如何使用md5_file()函数遍历某个目录下的所有文件,并将它们的MD5哈希值记录到日志文件中。
md5_file(string $filename): string|false
参数 $filename:要计算MD5的文件路径。
返回值:文件的MD5哈希字符串,如果失败返回 false。
示例:
$hash = md5_file('path/to/file.txt');
echo $hash;
使用PHP的递归目录遍历函数(如RecursiveDirectoryIterator)获取所有文件路径。
对每个文件调用md5_file()函数获取哈希值。
将文件路径及对应的MD5值写入日志文件。
<?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";
?>
请确保PHP脚本对指定的目录和日志文件具有读取和写入权限。
为避免日志文件过大,可以定期清理或者将日志文件按日期拆分。
如果想输出的文件路径中包含URL,可以替换域名部分,例如将https://example.com/path/file.jpg替换为https://m66.net/path/file.jpg。
例如: