在網站上線或更新過程中,我們經常需要確保某些關鍵文件沒有被篡改或者意外更改。 PHP 提供了一個非常實用的函數—— md5_file() ,它可以計算文件的MD5 散列值,這對比對文件內容是否發生變化非常有幫助。
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() ,我們可以快速、有效地實現部署過程中的文件完整性驗證,從而提升部署質量,增強系統安全性。在不斷更新迭代的過程中,這樣的工具顯得尤為重要。