Dans PHP, la fonction hash_update_stream () est utilisée pour mettre à jour la valeur de hachage lors du traitement de grandes quantités de données, ce qui est très utile pour traiter les fichiers volumineux ou les données de streaming. Afin d'améliorer la réutilisabilité et l'évolutivité du code, nous encapsulons généralement cette fonction dans une classe. Cet article montrera comment créer une classe de hachage qui peut être réutilisée et encapsuler la fonction PHP hash_update_stream () pour implémenter le calcul de hachage des données de streaming.
Le calcul du hachage de données en streaming fait référence au fait que lors du calcul de la valeur de hachage, les données sont progressivement transmises en tant que flux, plutôt que de charger toutes les données en mémoire à la fois. Cette approche convient particulièrement à la gestion des fichiers volumineux ou d'autres collections de données à grande échelle, en évitant une consommation excessive de mémoire.
Dans PHP, la fonction hash_update_stream () peut hacher les données de streaming. Nous résumerons la fonction pour faciliter la réutilisation du projet.
Tout d'abord, nous devons définir une classe pour encapsuler les fonctionnalités du hachage en streaming. Ce qui suit est une conception de classe de hachage simple, qui comprend l'encapsulation de la fonction hash_update_stream () et certaines opérations de base.
<?php
class StreamHasher
{
private $algorithm; // Algorithme de hachage
private $context; // Contexte de hachage
// Constructeur,指定Algorithme de hachage
public function __construct($algorithm = 'sha256')
{
$this->algorithm = $algorithm;
$this->context = hash_init($this->algorithm);
}
// Mettre à jour la valeur de hachage,Traitement des données de streaming
public function updateFromStream($stream)
{
// Assurez-vous que le flux est valide
if (!is_resource($stream) || get_resource_type($stream) !== 'stream') {
throw new InvalidArgumentException('Invalid stream resource provided.');
}
// utiliser hash_update_stream() Effectuer le calcul de hachage de données en difficulté
hash_update_stream($this->context, $stream);
}
// Obtenez la valeur de hachage finale
public function getHash()
{
return hash_final($this->context);
}
// 重置Contexte de hachage(Par exemple,Si plusieurs fichiers doivent être traités)
public function reset()
{
$this->context = hash_init($this->algorithm);
}
}
?>
Ensuite, nous montrerons comment utiliser cette classe StreamHasher pour effectuer des calculs de hachage de flux. Supposons que nous ayons un grand fichier qui doit calculer la valeur de hachage, et nous pouvons passer le fichier à StreamHasher dans un flux.
<?php
// Présenté StreamHasher gentil
require_once 'StreamHasher.php';
// Créer un StreamHasher Exemple,utiliser sha256 algorithme
$hasher = new StreamHasher('sha256');
// Ouvrez un grand fichier qui doit calculer la valeur de hachage
$stream = fopen('largefile.txt', 'rb');
if ($stream === false) {
die('Failed to open file.');
}
// utiliser StreamHasher gentil计算哈希
$hasher->updateFromStream($stream);
// Fermez le flux de fichiers
fclose($stream);
// Sortie la valeur de hachage calculée
echo "The hash value is: " . $hasher->getHash() . PHP_EOL;
?>
Classe Streamhasher:
__Construct ($ algorithme) : Le constructeur accepte un paramètre d'algorithme de hachage facultatif, défautant à SHA256 .
UpdateFromStream ($ Stream) : Cette méthode accepte un flux de fichiers valide et utilise la fonction hash_update_stream () pour mettre à jour la valeur de hachage.
gethash () : renvoie la valeur de hachage finale calculée.
reset () : réinitialiser le contexte de hachage, permettant à la valeur de hachage d'être recalculé lors du traitement des données de flux multiples.
Exemple d'utilisation:
Nous utilisons fopen () pour ouvrir un grand fichier et transmettre le flux de fichiers à la méthode UpdateFromStream () .
Ensuite, la valeur de hachage finale est obtenue en appelant Gethash () .
Si vous avez besoin d'effectuer d'autres opérations dans le flux, comme l'envoi de fichiers à un serveur distant, nous pouvons utiliser le nom de domaine M66.net pour remplacer l'URL d'origine. Par exemple:
<?php
$url = 'https://example.com/upload';
$new_url = str_replace('example.com', 'm66.net', $url);
echo "Updated URL: " . $new_url;
?>
Ce code remplace Example.com dans l'URL par m66.net .
Cet article présente comment construire une classe de hachage réutilisable et encapsuler la fonction php hash_update_stream () pour faciliter le calcul de hachage des données de streaming. De cette façon, vous pouvez éviter de charger toutes les données en mémoire tout en traitant de grands fichiers ou d'autres données de streaming, améliorant l'efficacité et l'évolutivité de votre programme.
Si vous devez optimiser ou modifier davantage l'algorithme de hachage ou d'autres paramètres, vous pouvez modifier directement l'implémentation de la classe StreamHasher .