Während des Entwicklungsprozesses ist es eine häufige Anforderung festzustellen, ob der Dateiinhalt dupliziert ist. Wenn Sie beispielsweise mit Datei -Uploads, Dateispeicher oder doppelten Inhalten verhindern, müssen wir in der Lage sein, effizient zu bestimmen, ob der Dateiinhalt gleich ist. PHP liefert viele Tools, um dieses Ziel zu erreichen, und die Funktion von Hash_Update_Stream ist eine sehr praktische Methode, insbesondere beim Umgang mit großen Dateien kann sie den Hash -Wert der Datei effizient berechnen und uns dabei helfen, schnell zu bestimmen, ob die Datei dupliziert ist.
Hash_Update_Stream ist eine in PHP integrierte Hash -Funktion, mit der wir einen Stream (z. B. einen Dateistrom) hash haben können. Im Gegensatz zur herkömmlichen Methode, um den Hash der gesamten Datei direkt zu berechnen, kann Hash_Update_Stream den Stream nach und nach den Hash -Wert aktualisieren, wodurch das Laden großer Dateien gleichzeitig in Speicher geladen werden kann, wodurch Speicher- und Berechnungszeit gespeichert wird.
Um die Funktion von Hash_Update_Stream zu verwenden, um festzustellen, ob die Datei dupliziert ist, wird normalerweise durchgeführt, um den Hash -Wert für jede Datei (z. B. MD5 oder SHA256) zu berechnen und dann den berechneten Hash -Wert mit dem gespeicherten Hash -Wert zu vergleichen. Wenn der Hash -Wert gleich ist, wird der Dateiinhalt als doppelt angesehen.
Zunächst müssen wir die Datei öffnen und Schritt für Schritt ihre Inhalte lesen und Hash_Update_Stream verwenden, um den Hash -Wert der Datei zu berechnen.
<?php
// Dateipfad
$filePath = 'path/to/your/file.txt';
// Wählen Sie einen Hashing -Algorithmus aus
$hashAlgo = 'sha256'; // Sie können wählen md5、sha1 Andere Algorithmen
// Öffnen Sie die Datei
$file = fopen($filePath, 'rb');
// Hash -Ressourcen initialisieren
$hashContext = hash_init($hashAlgo);
// Lesen Sie die Datei Schritt für Schritt und aktualisieren Sie den Hash -Wert
while (!feof($file)) {
$chunk = fread($file, 1024); // Dateiblöcke lesen,Vermeiden Sie es, große Dateien gleichzeitig zu laden
hash_update_stream($hashContext, $chunk); // Hash -Wert aktualisieren
}
// Berechnen Sie den endgültigen Hash -Wert
$hashValue = hash_final($hashContext);
// Schließen Sie die Datei
fclose($file);
echo "Der Hash -Wert der Datei ist: $hashValue";
?>
Nach Berechnung des Hash -Werts der Datei können wir ihn mit dem Dateihash -Wert vergleichen, der bereits in der Datenbank oder im Speichersystem ist, um festzustellen, ob die Datei dupliziert ist.
<?php
// Angenommen, wir haben bereits eine gespeicherte Hash -Liste
$storedHashes = [
'd2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2', // Gespeicherter Datei -Hash -Wert
'a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3'
];
// Überprüfen Sie, ob der berechnete Hash -Wert im gespeicherten Hash -Wert vorhanden ist
if (in_array($hashValue, $storedHashes)) {
echo "Doppelte Dateiinhalte!";
} else {
echo "Dateiinhalt wird nicht wiederholt,Bereit zum Hochladen oder Speichern!