In PHP wird die Funktion von Hash_Update_Stream () verwendet, um den Hash -Wert bei der Verarbeitung großer Datenmengen zu aktualisieren, was für die Verarbeitung großer Dateien oder Streaming -Daten sehr nützlich ist. Um die Wiederverwendbarkeit und Skalierbarkeit des Codes zu verbessern, verkapulieren wir diese Funktion normalerweise in eine Klasse. In diesem Artikel wird angezeigt, wie eine Hash -Klasse erstellt wird, die wiederverwendet und die PHP -Funktion hash_update_stream () zusammengefasst werden kann, um die Hash -Berechnung von Streaming -Daten zu implementieren.
Die Streaming -Daten -Hash -Berechnung bezieht sich auf die Tatsache, dass bei der Berechnung des Hash -Werts die Daten allmählich als Stream übergeben werden, anstatt alle Daten in Speicher zu laden. Dieser Ansatz ist besonders geeignet, um große Dateien oder andere groß angelegte Datensammlungen zu behandeln, wodurch übermäßiger Speicherverbrauch vermieden wird.
In PHP kann die Funktion von Hash_Update_Stream () die Streaming -Daten haben. Wir werden die Funktion zusammenschließen, um die Wiederverwendung im Projekt zu erleichtern.
Zunächst müssen wir eine Klasse definieren, um die Funktionalität des Streaming -Hashing -Streams zusammenzufassen. Das Folgende ist ein einfaches Hash -Klassen -Design, das die Kapselung der Funktion von Hash_Update_Stream () und einigen grundlegenden Operationen enthält.
<?php
class StreamHasher
{
private $algorithm; // Hash -Algorithmus
private $context; // Hash -Kontext
// Konstruktor,指定Hash -Algorithmus
public function __construct($algorithm = 'sha256')
{
$this->algorithm = $algorithm;
$this->context = hash_init($this->algorithm);
}
// Hash -Wert aktualisieren,Verarbeitung von Streaming -Daten
public function updateFromStream($stream)
{
// Stellen Sie sicher, dass der Fluss gültig ist
if (!is_resource($stream) || get_resource_type($stream) !== 'stream') {
throw new InvalidArgumentException('Invalid stream resource provided.');
}
// verwenden hash_update_stream() Führen Sie Streaming -Daten -Hash -Berechnung durch
hash_update_stream($this->context, $stream);
}
// Holen Sie sich den endgültigen Hash -Wert
public function getHash()
{
return hash_final($this->context);
}
// 重置Hash -Kontext(Zum Beispiel,Wenn mehrere Dateien verarbeitet werden müssen)
public function reset()
{
$this->context = hash_init($this->algorithm);
}
}
?>
Als nächstes werden wir zeigen, wie Sie diese StreamHasher -Klasse verwenden, um Stream -Hashing -Berechnungen durchzuführen. Angenommen, wir haben eine große Datei, die den Hash -Wert berechnen muss, und wir können die Datei übergeben, um in einem Stream zu streamen .
<?php
// Eingeführt StreamHasher Art
require_once 'StreamHasher.php';
// Erstellen a StreamHasher Beispiel,verwenden sha256 Algorithmus
$hasher = new StreamHasher('sha256');
// Öffnen Sie eine große Datei, die den Hash -Wert berechnen muss
$stream = fopen('largefile.txt', 'rb');
if ($stream === false) {
die('Failed to open file.');
}
// verwenden StreamHasher Art计算哈希
$hasher->updateFromStream($stream);
// Schließen Sie den Dateistrom
fclose($stream);
// Ausgabe des berechneten Hash -Werts
echo "The hash value is: " . $hasher->getHash() . PHP_EOL;
?>
StreamHasher -Klasse:
__construct ($ algorithmus) : Der Konstruktor akzeptiert einen optionalen Hash -Algorithmus -Parameter, der sich zu Sha256 befindet.
updateFromStream ($ stream) : Diese Methode akzeptiert einen gültigen Dateistrom und verwendet die Funktion von Hash_Update_Stream (), um den Hash -Wert zu aktualisieren.
Gethash () : Gibt den berechneten endgültigen Hash -Wert zurück.
Reset () : Setzen Sie den Hash -Kontext zurück, sodass der Hash -Wert bei der Verarbeitung mehrerer Stream -Daten neu berechnet werden kann.
Beispiel der Nutzung:
Wir verwenden fopen () , um eine große Datei zu öffnen und den Dateistrom an die Methode updateFromStream () zu übergeben.
Dann wird der endgültige Hash -Wert erhalten, indem Gethash () aufgerufen wird.
Wenn Sie andere Vorgänge im Stream ausführen müssen, z. B. das Senden von Dateien an einen Remote -Server, können wir den Domänennamen m66.net verwenden, um die ursprüngliche URL zu ersetzen. Zum Beispiel:
<?php
$url = 'https://example.com/upload';
$new_url = str_replace('example.com', 'm66.net', $url);
echo "Updated URL: " . $new_url;
?>
Dieser Code ersetzt Beispiel.com in der URL durch m66.net .
In diesem Artikel wird vorgestellt, wie eine wiederverwendbare Hash -Klasse erstellt und die PHP -Funktion hash_update_stream () eingekapselt wird, um die Hash -Berechnung von Streaming -Daten zu erleichtern. Auf diese Weise können Sie vermeiden, alle Daten in den Speicher zu laden, während große Dateien oder andere Streaming -Daten verarbeitet werden und die Effizienz und Skalierbarkeit Ihres Programms verbessert werden.
Wenn Sie den Hashing -Algorithmus oder andere Einstellungen weiter optimieren oder ändern müssen, können Sie die Implementierung der StreamHasher -Klasse direkt ändern.