In der tatsächlichen Entwicklung ist die Dateideduplizierung eine häufige Anforderung, insbesondere beim Speichern einer großen Anzahl von Dateien. Das Vermeiden von doppelten Dateien spart nicht nur Platz, sondern verbessert auch die Systemeffizienz. PHP bietet eine sehr bequeme Funktion md5_file () , die uns helfen kann, die Hash -Berechnung der Datei schnell zu implementieren, um fest zu bestimmen, ob die Datei dupliziert ist.
md5_file () ist eine integrierte Funktion in PHP, um den MD5-Hash-Wert des angegebenen Dateiinhalts zu berechnen. Die grundlegende Syntax ist wie folgt:
string md5_file(string $filename, bool $raw_output = false)
$ Dateiname : Der zu berechnete Dateipfad.
$ raw_output : Ob im Roh-Binärformat ausgegeben werden soll, standardmäßig ist falsch , gibt eine 32-Bit-Hexadezimal-Zeichenfolge zurück.
Diese Funktion gibt eine eindeutige Zusammenfassung des Dateiinhalts zurück, der sehr geeignet ist, um festzustellen, ob der Inhalt der beiden Dateien gleich ist.
Die Idee ist sehr einfach:
Iteriert alle Dateien im Zielordner.
Verwenden Sie MD5_File () , um den Hash -Wert für jede Datei zu berechnen.
Verwenden Sie ein Array, um den Hash -Wert aufzuzeichnen, der erschienen ist.
Wenn der Hash -Wert einer Datei bereits vorhanden ist, wird festgestellt, dass es sich um eine doppelte Datei handelt, und Sie können wählen, ob Sie löschen oder überspringen können.
Hier ist der Beispielcode:
<?php
$directory = '/path/to/your/files'; // Dateiverzeichnis
$hashes = []; // Wird verwendet, um den Hash -Wert der Datei zu speichern
// Überqueren Sie alle Dateien im Verzeichnis
$files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($directory));
foreach ($files as $file) {
if ($file->isFile()) {
$filePath = $file->getRealPath();
$fileHash = md5_file($filePath); // Dateien berechnenMD5
if (isset($hashes[$fileHash])) {
// Suchen Sie doppelte Dateien,Verarbeitung durchführen,Zum Beispiel löschen
echo "Doppelte Dateien: {$filePath} 已存在Doppelte Dateien {$hashes[$fileHash]}\n";
// unlink($filePath); // Bei Bedarf zum Löschen,Diese Linie überzeugen
} else {
// Neuer Hash aufnehmen
$hashes[$fileHash] = $filePath;
}
}
}
?>
Batch -Verarbeitung : Wenn es viele große Verzeichnisdateien gibt, können Sie Stapel scannen, um zu vermeiden, dass eine große Menge Speicher gleichzeitig verbraucht wird.
Cache Hash : Für häufig verwendete Verzeichnisse können die Hash -Ergebnisse in die Datenbank oder Datei zwischengespeichert werden und sie beim nächsten Mal direkt lesen, um die Effizienz zu verbessern.
Ersatzalgorithmus : MD5 ist hocheffizient, hat jedoch eine schwache Sicherheit. Wenn die Sicherheitsanforderungen hoch sind, können Sie in Betracht ziehen, sha1_file () oder hash_file () zu verwenden.
PHP -offizielles Dokument: MD5_file ()