Dans PHP, la fonction hash_update_stream () nous permet de mettre à jour un contexte de hachage qui a été créé. Contrairement aux données statiques, les données de streaming peuvent être très importantes ou ne peuvent pas être chargées dans la mémoire à la fois, donc l'utilisation du streaming est très importante. Cet article présentera comment utiliser la fonction hash_update_stream () en conjonction avec zip: // ou php: // filtre pour traiter les données de streaming.
hash_update_stream () est une fonction de hachage dans PHP qui met à jour le contexte de hachage en traitement des données de streaming telles que les flux de données de fichiers ou de réseau. Son utilisation est la suivante:
hash_update_stream ( resource $context , resource $handle [, int $length = 1024 ] ) : bool
$ Context : Il s'agit du contexte de hachage créé par hash_init () .
$ Handle : Il s'agit de la ressource de flux de données qui doit être lue à partir du flux, comme une poignée de fichiers ou d'autres types de flux.
$ Longueur : Il s'agit du nombre d'octets lus par temps, par défaut à 1024 octets.
Dans PHP, Zip: // est un protocole spécial pour lire directement les flux de données à partir de fichiers ZIP. Lorsque vous devez hacher un fichier compressé, vous pouvez accéder au contenu du fichier via le protocole zip: // et utiliser hash_update_stream () pour traiter les données de streaming.
Supposons que nous ayons un fichier zip example.zip et qu'il contient un fichier texte appelé file.txt , nous pouvons utiliser le code suivant:
<?php
// Créer un contexte de hachage
$hashContext = hash_init('sha256');
// utiliser zip:// Protocole Lire ZIP Flux de données dans un fichier
$zipStream = fopen('zip://example.zip#file.txt', 'r');
if ($zipStream) {
// Mettre à jour la valeur de hachage
while (!feof($zipStream)) {
hash_update_stream($hashContext, $zipStream);
}
fclose($zipStream);
// Obtenez la valeur de hachage finale
$hashValue = hash_final($hashContext);
echo "SHA-256 Hash of the file: " . $hashValue;
} else {
echo "Impossible d'ouvrir le fichier!";
}
?>
Php: // Filtre est une encapsulation de flux très puissante qui vous permet de filtrer les flux d'entrée. Par exemple, vous pouvez compresser, décompresser ou convertir les données via PHP: // filtre . Combiné avec hash_update_stream () , vous pouvez hacher les données de streaming traitées par une sorte de filtre.
Supposons que nous voulons lire et calculer la valeur de hachage d'un fichier texte via php: // filtre , mais en même temps, effectuez une conversion de caractères sur les données. Voici un exemple qui montre comment utiliser php: // filtre pour lire un flux converti via convert.iconv.utf-8 / iso-8859-1 et calculer son hachage:
<?php
// Créer un contexte de hachage
$hashContext = hash_init('md5');
// utiliser php://filter Lire et convertir le codage des caractères
$filteredStream = fopen('php://filter/read=convert.iconv.UTF-8/ISO-8859-1/resource=example.txt', 'r');
if ($filteredStream) {
// Mettre à jour la valeur de hachage
while (!feof($filteredStream)) {
hash_update_stream($hashContext, $filteredStream);
}
fclose($filteredStream);
// Obtenez la valeur de hachage finale
$hashValue = hash_final($hashContext);
echo "MD5 Hash of the file after conversion: " . $hashValue;
} else {
echo "Impossible d'ouvrir le fichier!";
}
?>
En combinant la fonction hash_update_stream () avec le protocole de filtre zip: // ou php: // , nous pouvons hacher de manière flexible le fichier compressé ou les données de streaming traitées. La capacité de traitement de streaming de hash_update_stream () permet un calcul efficace des valeurs de hachage sans consommer trop de mémoire même si le volume de données est très important. Que la lecture des données d'un fichier zip ou l'application de la conversion de codage de caractères dans un flux, hash_update_stream () fournit un moyen simple et efficace de gérer ces scénarios.