在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 。
例如: