Position actuelle: Accueil> Derniers articles> Alternatives à utiliser hash_update_stream () dans des versions PHP non soutenues

Alternatives à utiliser hash_update_stream () dans des versions PHP non soutenues

M66 2025-05-18

Dans PHP, hash_update_stream () est une fonction de diffusion de mise à jour des valeurs de hachage. Cependant, cette fonction n'est pas prise en charge dans toutes les versions PHP, en particulier dans les versions plus anciennes de PHP. Comment implémenter des fonctions similaires dans un environnement qui ne prend pas en charge cette fonction nécessite généralement des alternatives pour garantir la compatibilité et la sécurité du code. Cet article vous fournira plusieurs méthodes pour remplacer hash_update_stream () et s'assurer que l'opération de hachage est fluide.

1. Utilisez hash_init () et hash_update ()

Pour les anciennes versions de PHP, vous pouvez utiliser les fonctions hash_init () et hash_update () pour implémenter les mises à jour de hachage de streaming. Bien que les deux ne fournissent pas de streaming direct, il est possible de simuler une fonction comme hash_update_stream () en lisant manuellement le flux de fichiers et en mettant à jour le bloc de valeurs de hachage par bloc.

Exemple de code:

 <?php
// Ouvrez le flux de fichiers
$handle = fopen('file.txt', 'rb');
if ($handle === false) {
    die('Impossible d&#39;ouvrir le fichier');
}

// Initialiser l&#39;objet de hachage
$hash = hash_init('sha256');

// Lire les fichiers et mettre à jour le bloc de hachage par bloc
while (!feof($handle)) {
    $chunk = fread($handle, 8192);  // Chaque lecture 8KB données
    hash_update($hash, $chunk);
}

// Fermez le flux de fichiers
fclose($handle);

// Obtenez la valeur de hachage finale
echo 'La valeur de hachage du fichier est:' . hash_final($hash);
?>

Dans cet exemple, nous utilisons Fread () pour lire le bloc de fichiers par bloc et mettre à jour la valeur de hachage via hash_update () . Enfin, Hash_Final () renvoie le résultat du hachage final. Bien que cette méthode ne soit pas aussi directe que hash_update_stream () , elle peut réaliser le même effet sans la fonction.

2. Utilisez stream_get_contents () et hash_update ()

Une autre alternative consiste à obtenir le contenu de l'ensemble du flux de fichiers via la fonction Stream_get_Contents () , puis à mettre à jour la valeur de hachage avec hash_update () . Cette méthode convient aux situations où le fichier est plus petit, ou lorsque vous connaissez déjà la taille du fichier. Son avantage est que le code est concis, mais il peut prendre plus de mémoire pour les fichiers volumineux.

Exemple de code:

 <?php
// Ouvrez le flux de fichiers
$handle = fopen('file.txt', 'rb');
if ($handle === false) {
    die('Impossible d&#39;ouvrir le fichier');
}

// Obtenez l&#39;intégralité du contenu du fichier
$contents = stream_get_contents($handle);

// Fermez le flux de fichiers
fclose($handle);

// Initialiser l&#39;objet de hachage
$hash = hash_init('sha256');

// Mettre à jour le hachage
hash_update($hash, $contents);

// Obtenez la valeur de hachage finale
echo 'La valeur de hachage du fichier est:' . hash_final($hash);
?>

Dans cet exemple, nous utilisons Stream_get_Contents () pour lire l'intégralité du contenu du fichier et le passer à hash_update () . Bien que cette méthode soit simple, elle charge l'ensemble du fichier en mémoire à la fois et peut ne pas être applicable aux fichiers volumineux.

3. Utilisez des bibliothèques ou des extensions externes

Si vous ne prendz pas en charge hash_update_stream () dans votre environnement PHP et que vous souhaitez utiliser une méthode de mise à jour de streaming efficace de fonctionnalités similaires, vous pouvez envisager d'utiliser des bibliothèques ou des extensions externes pour fournir cette fonctionnalité. Par exemple, certains outils dans des cadres tels que Symfony fournissent un traitement de flux plus complexe et des capacités de mise à jour de hachage.

Exemple de code:

 <?php
// Présenté Symfony Classe d&#39;outils de traitement de flux
use Symfony\Component\Filesystem\Filesystem;
use Symfony\Component\Filesystem\Exception\IOExceptionInterface;

// Utilisation de la logique de traitement de flux personnalisé
$fs = new Filesystem();
$hash = hash_init('sha256');

try {
    // Lire le contenu du fichier Bloc par bloc
    $fs->readStream('file.txt', function($chunk) use ($hash) {
        hash_update($hash, $chunk);
    });

    // Obtenez la valeur de hachage finale
    echo 'La valeur de hachage du fichier est:' . hash_final($hash);

} catch (IOExceptionInterface $e) {
    echo 'Une erreur s&#39;est produite:' . $e->getMessage();
}
?>

Cet exemple montre comment combiner la bibliothèque Symfony pour un streaming plus flexible. Bien sûr, vous pouvez également choisir d'autres bibliothèques ou outils en fonction de vos besoins pour compléter les lacunes des fonctions intégrées PHP.

4. Améliorer la version PHP

Bien que la méthode ci-dessus puisse implémenter le hachage de mise à jour de streaming dans les versions inférieures de PHP, la solution idéale consiste à mettre à niveau votre version PHP en une version qui prend en charge Hash_update_stream () . La mise à niveau de PHP garantit que vous pouvez utiliser les dernières fonctionnalités tout en améliorant la sécurité et les performances du code.

Vous pouvez vous référer au lien suivant pour savoir comment mettre à niveau PHP:
Documentation officielle PHP
Téléchargement de la version PHP

Résumer

La fonction hash_update_stream () est une fonctionnalité très pratique dans PHP, mais si votre version PHP ne le prend pas en charge, vous pouvez toujours implémenter des mises à jour de hachage en streaming de plusieurs manières. Que ce soit en utilisant hash_init () et hash_update () ou en introduisant des bibliothèques externes, ces méthodes peuvent remplacer efficacement la fonction. Dans le même temps, la mise à niveau de la version PHP est un choix intelligent pour assurer la compatibilité à long terme et la sécurité du code.