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.
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 .
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.
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.
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.