hash_update_stream () est une fonction de PHP utilisée pour mettre à jour les valeurs de hachage. Il fait partie de l'extension de hachage qui permet aux développeurs de hacher les fichiers ou d'autres sources de données de streaming. L'utilisation de base de cette fonction est la suivante:
bool hash_update_stream ( resource $context , resource $stream [, int $length = 0 ] )
$ Context : une ressource de contexte de hachage créée par la fonction hash_init () .
$ Stream : la ressource de flux pour les données d'entrée, généralement un flux de fichiers.
$ Longueur : Paramètre facultatif, spécifiant la longueur du flux de lecture, par défaut à 0, indiquant que toutes les données sont lues.
hash_update_stream () est principalement utilisé pour traiter les grands flux de données, tels que les fichiers, pour éviter de charger les données entières en mémoire à la fois.
Il y a généralement plusieurs raisons lorsque hash_update_stream () renvoie false . Nous vérifierons un par un selon la FAQ:
Si la ressource Stream Nust Not est invalide, HASH_UPDATE_STREAM () renvoie également False . Les situations courantes comprennent:
Le fichier de flux n'est pas ouvert ou le chemin du fichier est mauvais.
Le flux entrant est fermé.
Le flux de fichiers a des autorisations insuffisantes, ce qui rend impossible la lecture.
Vérifiez si le chemin du fichier est correct.
Assurez-vous que le fichier a été ouvert avec succès et que le flux est valide.
Utilisez la fonction is_resource () pour vérifier si le flux est valide.
if (!is_resource($stream)) {
echo "Invalid stream resource.";
}
Le paramètre $ longueur est utilisé pour contrôler le nombre d'octets lus à chaque fois du flux. Si le nombre d'octets de lecture dépasse la taille réelle du fichier, ou si la longueur de définition est inappropriée (comme 0 signifie lire toutes les données, mais si le fichier est trop grand, il peut entraîner des problèmes de mémoire), il peut entraîner le retour de la mémoire hash_update_stream () .
Essayez de passer un paramètre de longueur de $ approprié, comme la lecture par bloc.
Assurez-vous que le flux est modéré dans le volume des données et évitez le débordement de la mémoire ou d'autres exceptions.
Si une erreur se produit lors de la lecture du flux (par exemple, un fichier est verrouillé ou une défaillance matérielle se produit pendant la lecture), hash_update_stream () renvoie également false . Les situations courantes comprennent:
Interruption de flux de réseau.
Les autorisations d'accès aux fichiers insuffisantes.
Utilisez d'autres méthodes telles que Stream_get_Contents () ou Fread () pour lire directement le flux pour vous assurer que les données du flux peuvent être lues normalement.
Si le contexte de hachage ( $ context ) n'est pas valide, hash_update_stream () peut également ne pas mettre à jour correctement la valeur de hachage, renvoyant false .
Assurez-vous que le contexte créé par hash_init () est valide et n'a pas été mal détruit ou fermé.
Certains algorithmes de hachage peuvent ne pas convenir au traitement des données en streaming, en particulier lors de l'utilisation d'algorithmes de hachage liés au chiffrement. Si l'algorithme de hachage spécifié ne prend pas en charge les données de streaming, ou s'il y a un bogue dans son implémentation, il peut provoquer une défaillance.
Assurez-vous que l'algorithme de hachage utilisé est correct et prend en charge les mises à jour de streaming, celles couramment utilisées telles que Sha256 , MD5 , etc.
$context = hash_init('sha256');
Lorsque vous rencontrez hash_update_stream () renvoie false , vous pouvez suivre les étapes suivantes pour la vérifier étape par étape:
Confirmer la validité des ressources de flux
Utilisez is_resource () pour vérifier si le flux est valide.
Assurez-vous que le chemin du fichier est correct et que le fichier est accessible.
Vérifiez si le contexte du hachage est créé avec succès
Assurez-vous que le contexte de hachage créé avec hash_init () est valide.
Vérifiez le flux de données
Vérifiez si le flux peut être lu normalement, utilisez Fread () ou d'autres fonctions de lecture de flux pour vous assurer que le flux de données est disponible.
Vérifiez le journal d'erreur
Vérifiez le journal d'erreur PHP pour les invites d'erreur liées aux lectures de flux, aux calculs de hachage ou aux autorisations.
Utilisez raisonnablement les paramètres de longueur
Si possible, évitez de lire trop de données à la fois, essayez de lire le flux par bloc et mettez progressivement à mettre à jour la valeur de hachage.
Voici un exemple simple de code qui montre comment utiliser la fonction hash_update_stream () :
<?php
// Initialiser le contexte du hachage
$context = hash_init('sha256');
// Ouvrez le flux de fichiers
$file = fopen('example.txt', 'r');
if ($file) {
// Mise à jour du bloc de hachage par bloc
while ($chunk = fread($file, 8192)) {
hash_update_stream($context, $chunk);
}
// Calculez la valeur de hachage finale
$hash = hash_final($context);
fclose($file);
echo "File hash: " . $hash;
} else {
echo "Failed to open file.";
}
?>
Dans cet exemple, nous utilisons Fread () pour lire le contenu du fichier par bloc et utilisons hash_update_stream () pour mettre à jour le contexte de hachage pour chaque élément de données lue. Enfin, nous obtenons la valeur de hachage finale via hash_final () .
hash_update_stream () Renvoie False indique généralement qu'il y a un problème avec la ressource de flux, le contexte de hachage ou la lecture du flux. En dépannant systématiquement les ressources de streaming, les autorisations de fichiers, le contexte de hachage et le processus de lecture, les problèmes peuvent être identifiés et résolus efficacement. Lors du traitement des fichiers volumineux ou des données de streaming, il est également très important de contrôler raisonnablement la taille du bloc de lecture.
Grâce aux méthodes ci-dessus, les développeurs peuvent s'assurer que la valeur de hachage est calculée de manière stable et fiable lors du traitement des fichiers volumineux, en évitant les erreurs causées par des problèmes de lecture de flux ou de données.