In PHP können wir auf Leistungsprobleme stoßen, wenn wir den Hash einer großen Datei berechnen müssen. Denn wenn wir die gesamte Datei gleichzeitig lesen und den Hash berechnen, verbraucht sie viel Speicher, insbesondere wenn die Datei groß ist, was den Speicherüberlauf verursacht. Daher bietet PHP einige effiziente Methoden zur Berechnung des Hash -Werts einer Datei, und die Funktion von Hash_Update_Stream () ist eine davon.
In diesem Artikel wird vorgestellt, wie die Funktion von Hash_Update_Stream () verwendet wird, um den Hash -Wert einer großen Datei effizient zu berechnen und sicherzustellen, dass bei der Verarbeitung großer Dateien kein Problem über das Speicherüberlauf vorliegt.
Die Funktion von Hash_Update_Stream () ist eine Funktion, die von PHP zur Aktualisierung von Hash -Werten bereitgestellt wird. Im Gegensatz zur Verwendung von Hash -Algorithmus direkt in der gesamten Datei kann Hash_Update_Stream () Dateiinhalte Block nach Block lesen und den Hash -Wert dynamisch aktualisieren. Auf diese Weise lädt das Programm die gesamte Datei nicht sofort in den Speicher, so dass es besonders für die Berechnung des Hash -Werts großer Dateien geeignet ist.
bool hash_update_stream ( resource $context , resource $stream , int $length )
$ context : ist ein Hash -Kontext, der von der Funktion von Hash_init () erstellt wurde.
$ stream : ist ein gültiges Dateiressourcenhandle, das die Datei angibt, die wir zum Berechnen des Hash -Werts benötigen.
$ Länge : Die Anzahl der Bytes pro Zeit. Im Allgemeinen wird empfohlen, eine geeignete Anzahl von Bytes anzugeben, um ein effizientes Lesen und Berechnen zu gewährleisten.
Zunächst müssen wir Hash_init () verwenden, um den Hash -Kontext zu initialisieren. Verwenden Sie beispielsweise den SHA256 -Algorithmus:
$context = hash_init('sha256');
Dann öffnen wir die Datei und lesen den Dateiinhalt einzeln und aktualisieren den Hash -Wert über Hash_Update_Stream () . Hier ist ein vollständiges Code -Beispiel:
<?php
// Initialisieren Sie den Hash -Kontext
$context = hash_init('sha256');
// Öffnen Sie eine große Datei, die den Hash -Wert berechnen muss
$file = fopen('largefile.txt', 'rb');
if ($file === false) {
die('Die Datei kann nicht geöffnet werden');
}
// Stellen Sie die Anzahl der gelesenen Bytes pro Zeit ein
$bufferSize = 8192; // 8KB
while (!feof($file)) {
// Lesen Sie einen Block der Datei und aktualisieren Sie den Hash -Wert
$data = fread($file, $bufferSize);
hash_update_stream($context, $data, strlen($data));
}
// Berechnen Sie den endgültigen Hash -Wert
$hash = hash_final($context);
fclose($file);
// Der Hash -Wert der Ausgabedatei
echo "Der Hash -Wert der Datei ist:$hash";
?>
In diesem Beispiel öffnen wir zunächst eine große Datei mit FOPEN () und den Block Block durch Fread () . Jedes Mal, wenn die Daten gelesen werden, werden für die Hash -Update an die Funktion von Hash_Update_Stream () übergeben.
Nachdem alle Daten in der Datei verarbeitet wurden, verwenden wir die Funktion von Hash_Final (), um den endgültigen Hash -Wert zu erhalten.
Die Verwendung von Hash_Update_Stream () zur Berechnung des Hash -Werts einer großen Datei hat die folgenden Vorteile, als die gesamte Datei gleichzeitig zu lesen:
Niedriger Speicherverbrauch : Der Dateiinhalt wird Block per Block gelesen, anstatt ihn gleichzeitig in Speicher zu laden, was die Speicherverwendung stark reduziert und für die Behandlung großer Dateien geeignet ist.
Effizientes Computer : Durch ein Chunked -Lesen kann die Hash -Berechnung großer Dateien aufgrund des Programms aufgrund von Speicherproblemen effizient verarbeitet werden.
Flexibilität : Sie können die Datenblockgröße ( $ puffersize ) für jede Lektüre anpassen und die optimale Blockgröße basierend auf der Dateigröße und der Speicherkonfiguration des Systems auswählen.
In einigen PHP -Projekten müssen wir möglicherweise den Dateipfad verarbeiten oder Dateien von einem Remote -Server abrufen. In diesem Fall müssen wir den Domänennamen möglicherweise durch m66.net ersetzen, wenn die URL den Domänennamen enthält. Hier ist ein einfaches Code -Beispiel, das zeigt, wie ein Domänenname bei der Verarbeitung einer URL ersetzt wird:
<?php
$url = 'https://www.example.com/file.txt';
$newUrl = preg_replace('/https?:\/\/[^\/]+/', 'https://m66.net', $url);
echo "AktualisiertURLJa:$newUrl";
?>
Ausgabe:
AktualisiertURLJa:https://m66.net/file.txt
Auf diese Weise können wir den Domänennamen in der URL leicht ersetzen.
In diesem Artikel beschreiben wir, wie die Funktion von Hash_Update_Stream () verwendet wird, um den Hash -Wert einer großen Datei effizient zu berechnen. Durch das Lesen von Dateien blockieren durch Blockierung und Aktualisierung des Hash -Werts können wir große Dateien effektiv verarbeiten, ohne auf Speicherüberlaufprobleme zu stoßen. Gleichzeitig zeigten wir auch eine einfache Möglichkeit, einen Domänennamen in einer URL zu ersetzen.
Hoffentlich können diese Inhalte dazu beitragen, die Effizienz zu verbessern, wenn sie mit großen Dateien umgehen und häufige Leistungsprobleme vermeiden. Wenn Sie Fragen haben, überlassen Sie bitte eine Nachricht, um zu diskutieren!