Aktueller Standort: Startseite> Neueste Artikel> Implementieren Sie die Hash -Integritätsüberprüfung der kontinuierlichen Übertragung von Dateien auf dem Haltepunkt

Implementieren Sie die Hash -Integritätsüberprüfung der kontinuierlichen Übertragung von Dateien auf dem Haltepunkt

M66 2025-05-27

Während der Dateiübertragung oder des Herunterladens, insbesondere großen Dateien, werden häufig Unterbrechungen auftreten. Um die Dateiintegrität zu gewährleisten, werden Dateien normalerweise während der Dateiübertragung hashiert und verifiziert. PHP liefert eine leistungsstarke Hashing -Funktion, und die Funktion Hash_Update_Stream ist eine davon. Es kann verwendet werden, um Hash -Berechnungen großer Dateien zu verarbeiten, insbesondere für die Überprüfung von Breakpoint -kontinuierlichen Dateien.

In diesem Artikel wird vorgestellt, wie Sie Hash_Update_Stream verwenden, um die Hash -Integritätsüberprüfung von Dateien zu implementieren, um sicherzustellen, dass Dateien nach dem Download nach der Unterbrechung die Integritätsüberprüfung sein können.

1. Was ist die Funktion von Hash_Update_Stream ?

Die Funktion von Hash_Update_Stream ist eine Funktion in PHP, die Hash -Werte während des Prozesses des Lesestromdaten berechnet. Im Gegensatz zu Hash_Update müssen die gesamten Daten gleichzeitig in den Speicher geladen werden, während Hash_Update_Stream den Dateistrom für Hash -Berechnungen schrittweise lesen kann, sodass er besonders für große Dateien oder Dateien geeignet ist, die in Teilen verarbeitet werden müssen.

 bool hash_update_stream ( resource $context , resource $stream [, int $length ] )
  • $ context : Hash -Ressource, normalerweise von Hash_init erstellt.

  • $ stream : Dateistromressource, normalerweise über fopen () erhalten.

  • $ Länge : Die Anzahl der zu lesen zu lesen, die Standardeinstellung beträgt 8192 Bytes.

2. Hash -Überprüfung der kontinuierlichen Übertragung von Dateien am Haltepunkt

Während der Dateiübertragung wird der Breakpoint -Übertragungsmechanismus weiterhin von der getrennten Position heruntergeladen, wenn die Übertragung unterbrochen wird. Um die Dateiintegrität nach kontinuierlicher Übermittlung des Haltepunkts zu überprüfen, wird der Hash -Wert der Datei normalerweise auf der Serverseite berechnet und mit dem vom Client übertragenen Hash -Wert verglichen.

Angenommen, Sie haben einen Haltepunkt, um die Datei bigfile.zip weiter herunterzuladen. Sie müssen überprüfen, ob die Datei während des Übertragungsprozesses einige der Inhalte manipuliert oder verloren hat. Im Folgenden sind die Schritte zur Implementierung der Hash -Integritätsprüfung aufgeführt.

3. Beispielcode: Verwenden Sie Hash_Update_Stream , um die Dateiintegrität zu überprüfen

Angenommen, wir müssen eine Datei bigfile.zip herunterladen und die Integrität der Datei überprüfen, wenn sie auf den Haltepunkt übertragen wird. Der folgende Code zeigt, wie der Hash einer Datei mit der Funktion Hash_Update_Stream während des Breakpoint -Fortsetzungs berechnet wird.

 <?php
// Anfänglicher Hash -Kontext(verwenden SHA256 Algorithmus)
$hashContext = hash_init('sha256');

// Öffnen Sie den Dateistrom
$fileStream = fopen('https://m66.net/bigfile.zip', 'rb');
if (!$fileStream) {
    die("Die Datei kann nicht geöffnet werden!\n");
}

// Berechnen Sie den Hash -Wert der Datei
while (!feof($fileStream)) {
    // Lesen Sie die Datei und aktualisieren Sie den Hash
    $data = fread($fileStream, 8192);
    hash_update_stream($hashContext, $data);
}

// Holen Sie sich den endgültigen Hash -Wert
$fileHash = hash_final($hashContext);

// Der Hash -Wert der Ausgabedatei
echo "AbgelegtSHA-256Hash -Wert:$fileHash\n";

// Schließen Sie den Dateistrom
fclose($fileStream);

// 假设已经在服务器端生成并存储了Abgelegt正确Hash -Wert
$serverStoredHash = 'abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890';

// 比较本地计算的Hash -Wert与服务器存储的Hash -Wert
if ($fileHash === $serverStoredHash) {
    echo "Die Überprüfung der Dateiintegrität war erfolgreich!\n";
} else {
    echo "Dateiüberprüfung fehlgeschlagen,Die Datei wurde möglicherweise beschädigt oder manipuliert!\n";
}
?>

4. Code Erläuterung

  • Hash_init : Initialisieren Sie einen Hash -Kontext und wählen Sie den SHA256 -Algorithmus aus, um den Hash -Wert zu generieren.

  • FOPEN : Öffnen Sie den zu heruntergeladenen Dateistream. Hier verwenden wir https://m66.net/bigfile.zip als Beispieldateiadresse.

  • Hash_Update_Stream : liest nach und nach jedes Datenstück in der Datei und aktualisiert den Hash -Wert. Die Datenblockgröße pro Zeit beträgt 8192 Bytes.

  • Hash_Final : Holt den endgültigen Hash -Wert der Datei.

  • Dateiüberprüfung : Vergleich des berechneten Hash -Werts mit dem korrekten Hash -Wert, der auf dem Server gespeichert ist, um die Integrität der Datei zu überprüfen.

5. Hash -Überprüfung beim kontinuierlichen Breakpoint -Getriebe

In einem Szenario, in dem Breakpoints fortgesetzt werden, speichern wir normalerweise einen "heruntergeladenen Teil" -Hash -Wert und berechnen dann den Hash des Dateiteils ab dem letzten Haltepunkt, während wir weiter heruntergeladen werden. Zu diesem Zweck kann Freead im Code mit FSEEK verwendet werden, um die Leseposition der Datei zu steuern, wodurch sichergestellt wird, dass die Berechnung aus der angegebenen Position beginnt.

 // Setzen Sie den Dateiflusszeiger auf den angegebenen Speicherort(Zum Beispiel der Teil, in dem der Haltepunkt fortgesetzt wird)
fseek($fileStream, $resumePosition);

Während wir weiter herunterladen, lesen wir die Datenblöcke weiterhin aus dem Speicherort der Lebensläufe und aktualisieren den Hash, um schließlich die Integrität der gesamten Datei zu überprüfen.

6. Zusammenfassung

Durch die Verwendung von Hash_Update_Stream bietet PHP eine effiziente Möglichkeit, den Hash -Wert großer Dateien zu berechnen, insbesondere wenn Dateien mit kontinuierlicher Übertragung von Breakpoint übertragen werden. Auf diese Weise können wir die Integrität und Korrektheit der Datei während des Übertragungsprozesses sicherstellen und Datenverlust oder Korruption vermeiden, nachdem die Datei in der Mitte getrennt ist.

Wenn Sie ein Datei -Download- oder Upload -System entwickeln, das die kontinuierliche Übertragung des Haltepunkts unterstützt, kombiniert mit der Funktion Hash_Update_Stream für die Hash -Überprüfung, erhalten Sie eine zuverlässige Datenintegritätsgarantie.