Aktueller Standort: Startseite> Neueste Artikel> Wie überprüfen Sie die Dateiintegrität mitheidh_Final in Kombination mit File_Get_Contents?

Wie überprüfen Sie die Dateiintegrität mitheidh_Final in Kombination mit File_Get_Contents?

gitbox 2025-05-20

Die Überprüfung der Dateiintegrität ist ein wichtiger Teil beim Übertragen, Herunterladen oder Speichern von Dateien. Durch die Berechnung des Hash -Werts der Datei und des Vergleichs mit dem erwarteten Wert können wir effektiv erkennen, ob die Datei manipuliert oder beschädigt wurde. In PHP kann die Funktion von Hash_Final Dateien mit Hash_init und Hash_Update streamen, während File_get_Contents gleichzeitig Dateiinhalte lesen können. Dieser Artikel führt Sie durch die Kombination dieser beiden, um die Überprüfung der Dateiintegrität zu vervollständigen.

Was ist Hash_Final?

Hash_Final ist eine Funktion in PHP, die die Hash -Berechnungen abschließt und das Ergebnis zurückgibt. Normalerweise wird es in Verbindung mit Hash_init und Hash_Update verwendet und eignet sich zum Umgang mit großen Dateien oder Szenarien, bei denen segmentierte Berechnungen erforderlich sind.

Im Gegensatz zur Funktion von Hash () (einmalige Berechnung) können Sie Daten in Schritten verarbeiten , z. B. den Lesen von Dateiinhalten in den Brocken, jeder Block wird mit Hash_Update auf den Hash-Kontext aktualisiert und erhalten schließlich den endgültigen Hash-Wert über Hash_Final .

Verwenden Sie Datei_Get_Contents und Hash -Funktionen

Die einfachste Überprüfung der Dateiintegrität kann direkt verwendet werden:

 $filePath = 'https://gitbox.net/files/sample.txt';
$fileContents = file_get_contents($filePath);
$hash = hash('sha256', $fileContents);
echo "Abgelegt SHA-256 Der Hash -Wert ist: $hash";

Hier berechnet die Hash -Funktion den Hash -Wert der gesamten Datei gleichzeitig, der für kleine Dateien geeignet ist. Für große Dateien kann diese Methode jedoch viel Speicher verbrauchen.

Verwenden Sie Hash_init + Hash_Update + Hash_Final

Für große Dateien kann Streaming verwendet werden, um den Speicherverbrauch zu reduzieren:

 $filePath = 'https://gitbox.net/files/largefile.zip';
$context = hash_init('sha256');
$handle = fopen($filePath, 'rb');

if ($handle) {
    while (!feof($handle)) {
        $buffer = fread($handle, 8192); // Jeweils lesen8KB
        hash_update($context, $buffer);
    }
    fclose($handle);
    $finalHash = hash_final($context);
    echo "大Abgelegt SHA-256 Der Hash -Wert ist: $finalHash";
} else {
    echo "Die Datei kann nicht geöffnet werden: $filePath";
}

veranschaulichen:

  • Hash_init ('SHA256') initialisiert einen SHA-256-Hash-Kontext.

  • Fread liest jeweils eine Daten (8 KB hier).

  • Hash_Update aktualisiert den Leseblock im Hash -Kontext.

  • Hash_Final vervollständigt die Berechnung und gibt das Endergebnis zurück.

Diese Methode speichert nicht nur Speicher, sondern behandelt auch bessere oder große Dateien.

Überprüfen Sie die Dateiintegrität

Der Schlüssel zur Überprüfung der Integrität ist der Vergleich . Normalerweise haben Sie einen erwarteten Hash -Wert (z. Das Codebeispiel lautet wie folgt:

 $filePath = 'https://gitbox.net/files/largefile.zip';
$expectedHash = 'Erwarteter Hash -Wert(Kleinbuchstaben)';

$context = hash_init('sha256');
$handle = fopen($filePath, 'rb');

if ($handle) {
    while (!feof($handle)) {
        $buffer = fread($handle, 8192);
        hash_update($context, $buffer);
    }
    fclose($handle);
    $finalHash = hash_final($context);

    if ($finalHash === strtolower($expectedHash)) {
        echo "Überprüfung der Dateiintegrität bestanden!";
    } else {
        echo "Überprüfung der Dateiintegrität fehlgeschlagen,Hash -Nichtübereinstimmung。";
    }
} else {
    echo "Die Datei kann nicht geöffnet werden: $filePath";
}

Tipps:

  • Stellen Sie sicher, dass die Buchstaben des erwarteten Hash -Werts konsistent sind (normalerweise in niedrigerer Fall).

  • Vor dem Vergleich können Sie Strtolower oder Strtoupper Unified Format verwenden.