溫馨提示×

php fileinfo如何驗(yàn)證文件完整性

PHP
小樊
81
2024-11-20 17:21:58
欄目: 編程語言

要使用PHP的fileinfo擴(kuò)展來驗(yàn)證文件的完整性,您可以比較文件的元數(shù)據(jù)(如文件大小、創(chuàng)建時(shí)間、修改時(shí)間等)與預(yù)期的值

<?php

function verifyFileIntegrity($filePath, $expectedFileSize, $expectedCreationTime, $expectedModificationTime) {
    // 檢查文件是否存在
    if (!file_exists($filePath)) {
        return false;
    }

    // 獲取文件的元數(shù)據(jù)
    $fileInfo = finfo_open(FILEINFO_MINITIME | FILEINFO_MINVERSION);
    $fileMetadata = finfo_file($fileInfo, $filePath);
    finfo_close($fileInfo);

    // 獲取文件的當(dāng)前元數(shù)據(jù)
    $currentFileSize = filesize($filePath);
    $currentCreationTime = filemtime($filePath);
    $currentModificationTime = filemtime($filePath);

    // 比較元數(shù)據(jù)與預(yù)期值
    if ($currentFileSize != $expectedFileSize) {
        return false;
    }

    if ($currentCreationTime !== $expectedCreationTime) {
        return false;
    }

    if ($currentModificationTime !== $expectedModificationTime) {
        return false;
    }

    return true;
}

// 使用示例
$filePath = 'path/to/your/file.txt';
$expectedFileSize = 1024; // 預(yù)期文件大小(字節(jié))
$expectedCreationTime = 1632931200; // 預(yù)期創(chuàng)建時(shí)間(Unix時(shí)間戳)
$expectedModificationTime = 1633017600; // 預(yù)期修改時(shí)間(Unix時(shí)間戳)

if (verifyFileIntegrity($filePath, $expectedFileSize, $expectedCreationTime, $expectedModificationTime)) {
    echo "文件完整性驗(yàn)證通過。";
} else {
    echo "文件完整性驗(yàn)證失敗。";
}

?>

請注意,這個(gè)示例使用了文件的創(chuàng)建時(shí)間和修改時(shí)間作為驗(yàn)證依據(jù)。您可以根據(jù)需要添加其他元數(shù)據(jù)(如MD5哈希值)來進(jìn)行更嚴(yán)格的完整性檢查。

0