In der tatsächlichen Entwicklung ist Dateifingerabdruck (Datei -Hash -Wert) eine übliche Anforderung, die zur Überprüfung der Dateiintegrität, zur Verhindern von Manipulationen oder zur Implementierung von Dateideduplizierung und anderen Funktionen verwendet wird. PHP bietet eine leistungsstarke integrierte Funktion md5_file () , mit der der MD5-Hash-Wert einer Datei problemlos erhalten werden kann. In Kombination mit der Funktion Scandir () kann die Erzeugung aller Dateien in einem bestimmten Verzeichnis leicht erreicht werden.
In diesem Artikel wird detailliert vorgestellt, wie Sie MD5_File () und Scandir () verwenden, um die Batch -Erzeugung von Dateifingerabdrücken zu erreichen und vollständigen Beispielcode zu geben.
md5_file (String $ Dateiname): String | False
Berechnet den MD5-Hash-Wert der angegebenen Datei, gibt eine 32-Bit-Zeichenfolge zurück und gibt False zurück, wenn das Lesen fehlschlägt.
scandir (String $ -Verzeichnung, int $ sorting_order = scandir_sort_ascending): Array | Falsch
Ruft alle Dateien und Unterverzeichnisse in das angegebene Verzeichnis und gibt ein Array mit Dateinamen zurück.
Verwenden Sie Scandir (), um alle Dateien und Ordneramen im Zielverzeichnis zu erhalten.
Filtern Sie spezielle Verzeichnisse heraus . und ... in Verzeichnisartikeln.
Idieren Sie alle Dateien durch und verwenden Sie MD5_file () , um den MD5 -Fingerabdruck zu erhalten.
Speichert den Dateinamen und den entsprechenden MD5 -Wert für das Array oder die Ausgabe.
<?php
$directory = '/path/to/your/files'; // Ersetzen Sie es durch den Verzeichnispfad, den Sie scannen möchten
// Scannen Sie das Verzeichnis
$files = scandir($directory);
if ($files === false) {
die('Verzeichnislesung ist fehlgeschlagen');
}
$fileHashes = [];
foreach ($files as $file) {
// Filtern '.' Und '..'
if ($file === '.' || $file === '..') {
continue;
}
$filePath = $directory . DIRECTORY_SEPARATOR . $file;
// Nur Dateien verarbeiten,Ignorieren Sie Unterverzeichnisse
if (is_file($filePath)) {
$hash = md5_file($filePath);
if ($hash !== false) {
$fileHashes[$file] = $hash;
} else {
$fileHashes[$file] = 'Read fehlgeschlagen';
}
}
}
// Ausgangsergebnis
foreach ($fileHashes as $filename => $md5) {
echo "Dateiname:{$filename},MD5 Fingerabdruck:{$md5}" . PHP_EOL;
}
?>
Der Verzeichnispfad muss als der tatsächliche Pfad auf dem Server geschrieben werden, um sicherzustellen, dass das PHP -Skript die Erlaubnis hat, das Verzeichnis zu lesen.
Dieser Beispielcode verarbeitet nur die erste Datendateienschicht im angegebenen Verzeichnis und wird nicht zu Unterverzeichnissen wiederholt. Wenn eine Rekursion erforderlich ist, kann sie in Verbindung mit rekursiven Funktionen oder einem rekursiven DirectoryToryToryIterator implementiert werden.
md5_file () eignet sich für die schnelle Fingerabdruckgenerierung kleiner Dateien. Es wird empfohlen, Brocken zu verwenden, um Hash -Werte zu berechnen, um Speicherüberläufe zu vermeiden.
Manchmal müssen wir Fingerabdrücke auf Remotedateien generieren. Obwohl MD5_File () Remote -Datei -URLs unterstützt, kann dies fehlschlagen, wenn der Remote -Server den Zugriff einschränkt. Es wird empfohlen, die Datei vor der Berechnung in das lokale temporäre Verzeichnis herunterzuladen.
Beispiel (schematisch):