Das Erstellen einer effizienten Tabelle für Dateisignaturen ist entscheidend, wenn Systeme mit Dateimanagement, Versionskontrolle oder Überprüfung der Dateiintegrität beteiligt sind. PHP bietet eine integrierte Funktion md5_file (), um den MD5-Hash-Wert einer Datei zu berechnen. Wir können die Datenbank kombinieren, um ein flexibles und effizientes Dateisignatursystem zu implementieren. Dieser Artikel führt Sie dazu, diesen Zielschritt Schritt für Schritt zu erreichen.
md5_file () ist eine bequeme Funktion, die von PHP bereitgestellt wird, um den MD5 -Wert des Dateiinhalts zu berechnen. Im Gegensatz zu MD5 () müssen Sie nicht zuerst die gesamte Datei mit Datei_get_Contents () lesen, sondern die Signatur direkt über den Dateipfad berechnen, der beim Umgang mit großen Dateien effizienter ist.
Beispiel Verwendung:
$hash = md5_file('/path/to/file.zip');
echo $hash;
Um Dateisignaturen zu verwalten, müssen wir die folgenden Informationen in der Datenbank aufzeichnen:
Dateipfad oder eindeutige Kennung
MD5 -Wert der Datei
Zeitstempel aktualisieren
Eine einfache MySQL -Tabellenstruktur kann wie folgt sein:
CREATE TABLE file_hashes (
id INT AUTO_INCREMENT PRIMARY KEY,
file_path VARCHAR(255) NOT NULL UNIQUE,
md5_hash CHAR(32) NOT NULL,
updated_at DATETIME NOT NULL
);
Wir können das Dateiverzeichnis regelmäßig scannen, den MD5 -Wert der aktuellen Datei mit dem in der Datenbank gespeicherten Wert vergleichen und feststellen, ob sich die Datei geändert hat.
function updateFileHash($filePath, $pdo) {
if (!file_exists($filePath)) {
return false;
}
$md5 = md5_file($filePath);
$now = date('Y-m-d H:i:s');
$stmt = $pdo->prepare("SELECT md5_hash FROM file_hashes WHERE file_path = :file_path");
$stmt->execute(['file_path' => $filePath]);
$existing = $stmt->fetch(PDO::FETCH_ASSOC);
if ($existing) {
if ($existing['md5_hash'] !== $md5) {
// Dateiinhalt wurde geändert,Datensätze aktualisieren
$updateStmt = $pdo->prepare("
UPDATE file_hashes
SET md5_hash = :md5_hash, updated_at = :updated_at
WHERE file_path = :file_path
");
$updateStmt->execute([
'md5_hash' => $md5,
'updated_at' => $now,
'file_path' => $filePath
]);
}
} else {
// Neue Datei,Datensatz einfügen
$insertStmt = $pdo->prepare("
INSERT INTO file_hashes (file_path, md5_hash, updated_at)
VALUES (:file_path, :md5_hash, :updated_at)
");
$insertStmt->execute([
'file_path' => $filePath,
'md5_hash' => $md5,
'updated_at' => $now
]);
}
return true;
}
Sie können das Dateisystem durchqueren und eine Stapelsignaturverwaltung von Dateien im Verzeichnis durchführen:
function scanDirectoryAndUpdate($directory, $pdo) {
$files = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($directory)
);
foreach ($files as $file) {
if ($file->isFile()) {
updateFileHash($file->getPathname(), $pdo);
}
}
}
Dieser Mechanismus kann häufig verwendet werden in:
Dateiversion Tracking -System
CDN- oder Cache -Misserfolgsurteil
Manipulationssicheres Überwachungssystem
Dateisynchronisationserkennung für ein einfaches Bereitstellungssystem
Beispielsweise kann das Bereitstellungssystem seinen MD5-Wert berechnen, bevor eine Datei hochgeladen und mit den Datensätzen in der serverseitigen Datenbank verglichen wird. Wenn es konsistent ist, muss es nicht hochgeladen werden, was die Einsatzeffizienz verbessert.
Sie können sogar ein Web -Panel erstellen, um die Dateisignaturänderungen zu ändern, ähnlich wie folgt: