Aktueller Standort: Startseite> Neueste Artikel> Wie man inkrementell eine Datei mit Hash_Update_Stream () inkrementell hasht ()

Wie man inkrementell eine Datei mit Hash_Update_Stream () inkrementell hasht ()

M66 2025-05-31

Bei der Verarbeitung großer Dateien wird das direkte Lesen der gesamten Datei für Hash -Berechnungen viel Speicher in Anspruch nehmen und kann sogar zu unzureichendem Speicher führen. Um große Dateien effizient zu verarbeiten, liefert PHP die Funktion von Hash_Update_Stream () , mit der wir die großen Dateien schrittweise hash hash. Auf diese Weise können wir den Hash -Wert beim Lesen der Datei berechnen und so vermeiden, dass die gesamte Datei gleichzeitig in den Speicher geladen wird.

Was ist die Funktion von Hash_Update_Stream () ?

Hash_Update_Stream () ist eine Funktion in PHP, die den Hash -Wert von Stream -Daten inkrementell aktualisiert. Es ähnelt Hash_Update () , aber der Unterschied besteht darin, dass es eine Stream -Ressource als Eingabe akzeptiert, anstatt die String -Daten direkt zu verarbeiten. Auf diese Weise können Sie große Datenmengen verarbeiten, ohne sie gleichzeitig in den Speicher zu laden.

Wie verwende ich die Funktion von Hash_Update_Stream () ?

Bei Verwendung der Funktion von Hash_Update_Stream () müssen Sie zuerst einen Dateistrom öffnen und einen Hash -Kontext für die Datei erstellen. Sie können dann einen Teil des Inhalts der Datei streamen und den Hash -Wert schrittweise aktualisieren.

Hier sind die grundlegenden Schritte für inkrementelle Hashing große Dateien mit Hash_Update_Stream () :

  1. Initialisieren Sie den Hash -Kontext:

    Verwenden Sie zunächst die Funktion von Hash_init (), um den Hash -Kontext zu initialisieren. Sie können einen unterstützten Hashing -Algorithmus wie SHA256 oder MD5 auswählen.

     $hash_algorithm = 'sha256';  // Wählen Sie einen Hashing -Algorithmus aus
    $context = hash_init($hash_algorithm);
    
  2. Öffnen Sie den Dateistrom:

    Verwenden Sie die Funktion fopen (), um die Datei zu öffnen und einen Dateistrom zu erhalten.

     $file_path = 'path_to_large_file.txt';  // Ersetzen Sie durch einen großen Dateipfad
    $file_stream = fopen($file_path, 'rb');
    if (!$file_stream) {
        die("Die Datei kann nicht geöffnet werden!");
    }
    
  3. Inkrementell Hash aktualisieren:

    Verwenden Sie die Funktion von Hash_Update_Stream (), um die Daten des Dateistroms zu verarbeiten. Sie können den Inhalt der Datei in Stapeln lesen und den Hash -Wert aktualisieren.

     while (!feof($file_stream)) {
        $data = fread($file_stream, 8192);  // Jeweils lesen8KBDaten
        hash_update_stream($context, $data);
    }
    
  4. Holen Sie sich den endgültigen Hash -Wert:

    Verwenden Sie nach dem Lesen der Datei die Funktion von Hash_Final () , um den endgültigen Hash -Wert zu erhalten.

     $final_hash = hash_final($context);
    echo "Der Hash -Wert der Datei ist: " . $final_hash . PHP_EOL;
    
  5. Schließen Sie den Dateistrom:

    Vergessen Sie nicht, den Dateistrom zu schließen.

     fclose($file_stream);
    

Vollständiger Beispielcode

 <?php

// Wählen Sie einen Hashing -Algorithmus aus
$hash_algorithm = 'sha256';
$context = hash_init($hash_algorithm);

// Öffnen Sie den Dateistrom
$file_path = 'path_to_large_file.txt';  // Ersetzen Sie durch einen großen Dateipfad
$file_stream = fopen($file_path, 'rb');
if (!$file_stream) {
    die("Die Datei kann nicht geöffnet werden!");
}

// Inkrementeller Aktualisierungshashwert
while (!feof($file_stream)) {
    $data = fread($file_stream, 8192);  // Jeweils lesen8KBDaten
    hash_update_stream($context, $data);
}

// Holen Sie sich den endgültigen Hash -Wert
$final_hash = hash_final($context);
echo "Der Hash -Wert der Datei ist: " . $final_hash . PHP_EOL;

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

?>

Dinge zu beachten

  1. Speichereffizienz: Wenn Sie die Funktion von Hash_Update_Stream () verwenden, um große Dateien zu verarbeiten, können Sie viel Speicher speichern, da die gesamte Datei nicht in den Speicher geladen wird, die Datei jedoch nach Block liest und den Hash -Wert schrittweise aktualisiert.

  2. Die Größe des Datei -Leseblocks: Die Größe des Leseblocks (der zweite Parameter von Fread () ) kann gemäß der tatsächlichen Situation eingestellt werden. Im Allgemeinen ist 8 KB bis 64 KB ein angemessener Bereich, der basierend auf Dateigröße und Hardwarebedingungen optimiert werden kann.

  3. Fehlerbehandlung: In den tatsächlichen Anwendungen sollten Sie auf die Lesung von Dateien wie das Versagen oder Lesen von Interrupts achten.

Zusammenfassen

Die Funktion von Hash_Update_Stream () ist ein sehr praktisches Instrument zur Behandlung von Hash -Berechnungen für große Dateien. Es kann uns helfen, die Hash -Werte Schritt für Schritt beim Streaming zu berechnen und das Problem beim Laden der gesamten Datei gleichzeitig zu vermeiden. Mit angemessenen Blockgröße und inkrementellen Aktualisierungen können Sie den Hash von großen Dateien effizient berechnen und sich an verschiedene Speicherbeschränkungen anpassen.