In vielen Anwendungsszenarien ist die Berechnung des Hash -Werts einer Datei eine übliche Anforderung, insbesondere die Überprüfung der Dateiintegrität, die Überprüfung, ob die Datei beim Herunterladen manipuliert wurde, usw. PHP bietet Hash_Update_Stream -Funktion, die die Hash -Werte in Echtzeit berechnen kann, wenn sie Stream -Daten verarbeiten. Dies ist besonders wichtig für die Verarbeitung großer Dateien, da wir die gesamte Datei nicht sofort in den Speicher laden müssen, sondern den Hash -Wert berechnen können, während wir die Datei lesen, um die Speicherverwendung zu reduzieren.
In diesem Artikel wird ausführlich erläutert, wie die Funktion Hash_Update_Stream verwendet wird, um Remote -Dateiströme zu verarbeiten und die Hash -Werte in Echtzeit zu berechnen.
Hash_Update_Stream ist eine integrierte Funktion in PHP, mit der der Hash-Wert von Stream-Daten in Echtzeit aktualisiert wird. Die Syntax der Funktion lautet wie folgt:
hash_update_stream ( resource $context , resource $stream , int $length = 8192 ) : bool
$ context : Hash -Kontextressource, normalerweise von Hash_init erstellt.
$ stream : Datei -Stream -Ressource, die verarbeitet werden muss.
$ Länge : Die Anzahl der Bytes, die jedes Mal gelesen werden, beträgt der Standard 8192 Bytes.
Diese Funktion liest Daten aus dem angegebenen Dateistrom und aktualisiert sie im Hash -Kontext, bis die Datei gelesen wird.
In PHP verwendet die Handhabung von Remote -Dateiströmen normalerweise Fopen- oder Lockenfunktionen . Hier finden Sie ein Beispiel mit Fopen- und Hash_Update_Stream -Funktionen, die demonstrieren, wie ein Remote -Dateistrom verarbeitet und Hash -Werte in Echtzeit berechnet werden.
<?php
// Initialisieren Sie den Hash -Kontext(Zum Beispiel SHA-256 Algorithmus)
$hashContext = hash_init('sha256');
// Remotedatei URL
$fileUrl = 'http://m66.net/samplefile.txt';
// Öffnen Sie den Remote -Dateistrom
$stream = fopen($fileUrl, 'r');
// Überprüfen Sie, ob die Datei erfolgreich geöffnet ist
if ($stream) {
// verwenden hash_update_stream Echtzeit-Hash-Wert-Update
while (!feof($stream)) {
// Jeweils lesen 8192 Bytes und aktualisieren Sie den Hash -Wert
hash_update_stream($hashContext, $stream, 8192);
}
// Schließen Sie den Dateistrom
fclose($stream);
// Holen Sie sich und geben Sie den endgültigen Hash -Wert aus und geben Sie sie aus
$hashValue = hash_final($hashContext);
echo "Der Hash -Wert der Datei ist: " . $hashValue;
} else {
echo "无法Öffnen Sie den Remote -Dateistrom!";
}
?>
Initialisieren Sie den Hash -Kontext :
Wir erstellen zunächst einen Hash-Kontext des SHA-256-Algorithmus durch die Hash_init- Funktion, damit wir den SHA-256-Hash-Wert der Datei berechnen können.
Öffnen Sie den Remote -Dateistrom :
Verwenden Sie Fopen , um Remote -Dateien zu öffnen. Die URL der Datei lautet in diesem Beispiel http://m66.net/samplefile.txt . Die URL hier ist der Teil, den Sie durch den Domänennamen m66.net ersetzen wollten.
Prozessdateiströme in Echtzeit :
Verwenden Sie die Funktion Hash_Update_Stream , um einen Teil der Daten aus dem Dateistrom zu lesen und den Hash -Wert jedes Mal zu aktualisieren. Die Standard-Blockgröße von 8192 Byte wird hier zum Lesen der Datei verwendet. Sie können diesen Wert nach Bedarf anpassen, um die Effizienz zu erhöhen oder den Speicherverbrauch zu verringern.
Schließen Sie den Dateistrom und die Ausgabeergebnisse :
Sobald die Lesen der Datei abgeschlossen ist, schließen Sie den Dateistrom mit FCLOSE und erhalten Sie den endgültigen Hash -Wert mithash_final .
Speicherverbrauch : Da wir den Block blockieren und den Hash -Wert aktualisieren, ist diese Methode effizienter als das Laden der gesamten Datei gleichzeitig, insbesondere für große Dateien.
Fehlerbehandlung : In praktischen Anwendungen sollten Sie verschiedene mögliche Fehler während der Unzugänglichkeit oder des Lesevorgangs der Datei berücksichtigen, z. B. Netzwerkunterbrechungen. Die Fehlerbehandlung kann mit der Anweisung Try-Catch -Anweisung oder der Überprüfung des Rückgabewerts durchgeführt werden.
Dateityp Support : Hash_Update_Stream unterstützt mehrere Dateitypen. Sie können den Hash -Algorithmus nach Bedarf anpassen, z. B. SHA1 , MD5 oder andere unterstützte Algorithmen.
Zusätzlich zur Verwendung von FOPEN können Sie auch Curl verwenden, um Remote -Dateiströme zu verarbeiten. Curl kann mehr HTTP -Anforderungsparameter und Headerinformationen verarbeiten, die für komplexere Remotedateivorgänge geeignet sind. Hier ist ein Beispiel mit Curl:
<?php
// Initialisieren Sie den Hash -Kontext
$hashContext = hash_init('sha256');
// Remotedatei URL
$fileUrl = 'http://m66.net/samplefile.txt';
// verwenden CURL Remote -Dateistream abrufen
$ch = curl_init($fileUrl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 30); // Timeout einstellen
// implementieren CURL Anfordern und abrufen Dateiinhalte
$response = curl_exec($ch);
// prüfen CURL Ob die Anfrage erfolgreich war
if ($response === false) {
echo "CURL Fehler: " . curl_error($ch);
curl_close($ch);
exit;
}
// verwenden hash_update_stream Verarbeiten Sie den Dateiinhalt und berechnen Sie den Hash -Wert
$stream = fopen('php://memory', 'r+');
fwrite($stream, $response);
rewind($stream);
while (!feof($stream)) {
hash_update_stream($hashContext, $stream, 8192);
}
// Holen Sie sich den endgültigen Hash -Wert
$hashValue = hash_final($hashContext);
echo "Der Hash -Wert der Datei ist: " . $hashValue;
// Schließen Sie den Dateistrom和 CURL Sitzung
fclose($stream);
curl_close($ch);
?>
Verwenden Sie in diesem Beispiel Curl, um den Remote -Dateiinhalt zu erhalten und in den Speicherstrom zu schreiben und dann den Hash -Wert mit Hash_Update_Stream zu berechnen. Dieser Ansatz eignet sich für Situationen, in denen komplexere Netzwerkkonfigurationen oder -steuerungen erforderlich sind.
Durch die Verwendung von PHP -Funktion von Hash_Update_Stream können Sie die Hash -Berechnungen großer Dateien effizient verarbeiten und das Laden von Dateien gleichzeitig in Speicher laden. Bei der Verarbeitung von Remote -Dateien können Sie Fopen oder Curl entsprechend den tatsächlichen Anforderungen auswählen. Nachdem Sie diese Technik beherrscht, können Sie sich in der Bearbeitung von Dateiüberprüfung, der Herunterladen von Überprüfung und anderen Szenarien wohler fühlen.
Ich hoffe, dieser Artikel ist für Sie hilfreich. Wenn Sie Fragen haben, können Sie sie gerne im Kommentarbereich besprechen!