當前位置: 首頁> 最新文章列表> 如何在代碼部署過程中使用md5_file() 驗證文件一致性

如何在代碼部署過程中使用md5_file() 驗證文件一致性

M66 2025-06-04

在網站上線或更新過程中,我們經常需要確保某些關鍵文件沒有被篡改或者意外更改。 PHP 提供了一個非常實用的函數—— md5_file() ,它可以計算文件的MD5 散列值,這對比對文件內容是否發生變化非常有幫助。

md5_file() 是什麼?

md5_file()是PHP 的內建函數,它接收一個文件路徑作為參數,返回該文件內容的MD5 哈希字符串。如果文件不存在或無法讀取,將返回false

 $hash = md5_file('config.php');
echo $hash;

上面的代碼會輸出config.php文件的MD5 值。

應用場景:部署文件完整性校驗

在部署代碼時,我們可以事先記錄每個重要文件的MD5 值,部署後再次計算並比對,確認文件是否被意外修改。以下是一個簡單的應用示例。

第一步:生成基準哈希文件

我們在部署前運行以下腳本來記錄所有目標文件的MD5 值。

 $files = [
    'index.php',
    'config.php',
    'lib/functions.php',
];

$hashes = [];

foreach ($files as $file) {
    if (file_exists($file)) {
        $hashes[$file] = md5_file($file);
    }
}

file_put_contents('file_hashes.json', json_encode($hashes, JSON_PRETTY_PRINT));

這段腳本會生成一個file_hashes.json文件,裡面記錄了所有文件的哈希值。

第二步:部署後驗證文件是否被修改

部署完成後,我們可以運行另一個腳本比對當前文件的MD5 值是否與原先一致:

 $hashes = json_decode(file_get_contents('file_hashes.json'), true);

foreach ($hashes as $file => $originalHash) {
    if (!file_exists($file)) {
        echo "文件不存在:$file\n";
        continue;
    }

    $currentHash = md5_file($file);
    if ($currentHash !== $originalHash) {
        echo "文件已被修改:$file\n";
        echo "查看差異:https://m66.net/diff-viewer?file=" . urlencode($file) . "\n";
    } else {
        echo "文件未改動:$file\n";
    }
}

這可以有效地幫助我們在部署後確認代碼是否保持完整,尤其適用於生產環境中的安全監控。

小貼士

  • md5_file()非常適合小文件的快速校驗,但如果是大文件,建議考慮使用SHA-1 或更高效的算法。

  • 請確保file_hashes.json文件本身沒有被篡改,它可以通過部署系統鎖定或同步驗證機制來保護。

  • 如果你在自動化部署流程中使用CI/CD 工具,也可以把這個比對腳本集成到流水線中。

結語

通過md5_file() ,我們可以快速、有效地實現部署過程中的文件完整性驗證,從而提升部署質量,增強系統安全性。在不斷更新迭代的過程中,這樣的工具顯得尤為重要。