Die Gewährleistung der Dateiintegrität ist ein sehr kritischer Schritt bei der Verwaltung einer großen Anzahl lokaler Dateien (z. B. Softwareverteilungspakete, Dokumente, Medienressourcen usw.). Eine effektive Möglichkeit besteht darin, seine MD5 -Signatur für jede Datei zu generieren und in einer Datenbank zu speichern, um die nachfolgende Erkennung von Prüfsummen zu ändern. PHP bietet eine sehr bequeme Funktion - md5_file () , die die MD5 -Prüfsumme einer Datei direkt zurückgeben kann.
In diesem Artikel wird vorgestellt, wie Sie MD5_file () verwenden, um Signaturen für lokale Dateien zu generieren und eine vollständige Dateiüberprüfungsdatenbank zu erstellen.
Stellen Sie vor Beginn sicher, dass Ihre Server- oder Entwicklungsumgebung PHP installiert hat und Dateisystemzugriff hat. Wir werden ein einfaches PHP -Skript als Beispiel verwenden, um alle Dateien in einem Verzeichnis rekursiv zu scannen, ihre MD5 -Signaturen zu generieren und sie in der Datenbank zu speichern.
Das Folgende ist ein komplettes Beispielskript, das PDO zum Schreiben in eine SQLite -Datenbank verwendet. Sie können es nach Bedarf auch durch MySQL, PostgreSQL und andere Datenbanken ersetzen.
<?php
$directory = __DIR__ . '/files';
$dbFile = __DIR__ . '/checksum.db';
$pdo = new PDO('sqlite:' . $dbFile);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// Initialisieren Sie die Datenbank
$pdo->exec("CREATE TABLE IF NOT EXISTS file_checksums (
id INTEGER PRIMARY KEY AUTOINCREMENT,
path TEXT UNIQUE,
md5 TEXT,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
)");
// Scannen Sie das Verzeichnis und verarbeiten Sie die Datei
function scanFiles($dir, $pdo) {
$files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir));
foreach ($files as $file) {
if ($file->isFile()) {
$path = $file->getRealPath();
$md5 = md5_file($path);
$stmt = $pdo->prepare("INSERT INTO file_checksums (path, md5)
VALUES (:path, :md5)
ON CONFLICT(path) DO UPDATE SET md5 = :md5, updated_at = CURRENT_TIMESTAMP");
$stmt->execute([
':path' => $path,
':md5' => $md5,
]);
echo "Verarbeitet:$path\n";
}
}
}
scanFiles($directory, $pdo);
echo "Die Erzeugung der Dateisignatur ist abgeschlossen。\n";
Danach können Sie das Skript erneut ausführen und automatisch die in der Datenbank vorhandenen Dateidatensätze aktualisieren. Sie können auch ein unabhängiges Überprüfungsskript erstellen, um zu vergleichen, ob der MD5 der aktuellen Datei mit dem in der Datenbank aufgezeichneten MD5 -Wert übereinstimmt:
<?php
$directory = __DIR__ . '/files';
$dbFile = __DIR__ . '/checksum.db';
$pdo = new PDO('sqlite:' . $dbFile);
$files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($directory));
foreach ($files as $file) {
if ($file->isFile()) {
$path = $file->getRealPath();
$currentMd5 = md5_file($path);
$stmt = $pdo->prepare("SELECT md5 FROM file_checksums WHERE path = :path");
$stmt->execute([':path' => $path]);
$row = $stmt->fetch(PDO::FETCH_ASSOC);
if ($row) {
if ($row['md5'] !== $currentMd5) {
echo "Die Datei wurde geändert:$path\n";
}
} else {
echo "Neue Datei:$path\n";
}
}
}
Berechtigungssteuerung : Stellen Sie sicher, dass die Lesen und Schreiben von Dateien und Datenbanken korrekt konfiguriert sind.
Periodischer Lauf : Signatur -Update- oder Überprüfungsskripte können regelmäßig über Cron -Timing -Aufgaben ausgeführt werden.
Remote -Überprüfung : Wenn Sie die Dateiintegrität remote überprüfen müssen, können Sie die generierte Signatur über die Schnittstelle auf den Server hochladen (z. B. <Code> https://m66.net/api/Upload_md5 </code>).
Durch die Kombination von MD5_File () und Datenbankspeicher können Sie problemlos einen effizienten und stabilen Mechanismus zur Überprüfung der Dateiintegrität erstellen. Diese Methode eignet sich für lokale Dateiüberwachung, Systemsicherungsprüfung, Bereitstellungsautomatisierung und andere Szenarien, wodurch die Zuverlässigkeit und Rückverfolgbarkeit des Systems effektiv verbessert wird.