En PHP, lors du traitement des fichiers volumineux, le chargement directement du fichier entier en mémoire pour les calculs de hachage peut prendre beaucoup de ressources de mémoire, en particulier lorsque les fichiers sont très importants. Pour résoudre ce problème, PHP fournit la fonction PHP: // STDIN Stream et Hash_update_stream () . La combinaison des deux peut implémenter le traitement de hachage en streaming, c'est-à-dire le calcul du hachage lors de la lecture du contenu du fichier pour éviter le débordement de la mémoire.
Cet article montrera comment utiliser ces deux outils pour diffuser des calculs de hachage sur la ligne de commande, en particulier lorsque vous travaillez avec des fichiers volumineux, comment calculer efficacement les valeurs de hachage.
Tout d'abord, assurez-vous que PHP a installé PHP et que vous pouvez exécuter des scripts PHP à partir de la ligne de commande. Vous pouvez confirmer si PHP est installé correctement en suivant la commande suivante:
php -v
Si vous n'avez pas installé PHP, vous pouvez télécharger et installer PHP sur http://m66.net/download/php .
Ensuite, nous utiliserons le flux PHP: // STDIN intégré de PHP pour lire l'entrée standard et combiner la fonction hash_update_stream () pour le calcul du hachage.
php: // stdin est un flux spécial qui vous permet de lire les données à partir de l'entrée standard (généralement le flux d'entrée de la ligne de commande). Vous pouvez l'utiliser pour gérer les fichiers volumineux ou les flux d'entrée en direct sans charger toutes les données en mémoire.
La fonction hash_update_stream () est l'une des fonctions utilisées par PHP pour calculer les valeurs de hachage. Contrairement à la fonction Hash_update () ordinaire, il vous permet de mettre à jour la valeur de hachage directement via le flux, ce qui le rend particulièrement utile lors de la gestion des mégadonnées.
bool hash_update_stream ( resource $context , resource $stream [, int $length = 8192 ] )
$ Context : Hash Context créé par hash_init () .
$ Stream : Le flux utilisé pour calculer le hachage (dans notre cas, php: // stdin ).
$ Longueur : le nombre maximum d'octets lus à la fois (par défaut est 8192 octets).
Voici un exemple simple montrant comment utiliser php: // stdin et hash_update_stream () pour le streaming des calculs de hachage.
<?php
// Créer un SHA256 contexte de hachage
$context = hash_init('sha256');
// Ouvrir php://stdin couler
$stream = fopen('php://stdin', 'r');
// Chaque lecture 8192 Octets de données et mise à jour de la valeur de hachage
while (!feof($stream)) {
$data = fread($stream, 8192);
hash_update_stream($context, $data);
}
// Calculez la valeur de hachage finale
$hash = hash_final($context);
// Sortie la valeur de hachage calculée
echo "La valeur de hachage calculée est:$hash\n";
// 关闭couler
fclose($stream);
?>
Enregistrez le code ci-dessus comme hash_stdin.php .
Données de tuyau dans le script pour les calculs de hachage sur la ligne de commande. Par exemple, lisez un fichier et calculez son hachage SHA256:
cat largefile.txt | php hash_stdin.php
Alternativement, vous pouvez avoir directement des calculs de hachage en entrant:
echo "Hello, World!" | php hash_stdin.php
Créer un contexte de hachage:
Créez un contexte de hachage SHA256 à l'aide de hash_init («sha256») . Vous pouvez remplacer «Sha256» par d'autres algorithmes de hachage pris en charge tels que MD5 , SHA1 , etc.
Ouvrez le flux d'entrée standard:
fopen ('php: // stdin', 'r') ouvre un flux pointant vers une entrée standard. De cette façon, nous pouvons lire les données d'entrée de la ligne de commande.
Lisez et mettez à jour le hachage:
Utilisez Fread () pour lire le bloc de données par bloc (8192 octets sont lus à chaque fois), puis utilisez hash_update_stream () pour mettre à jour le calcul du hachage.
Calculez la valeur de hachage finale:
Une fois le fichier lu, appelez hash_final () pour calculer et obtenir la valeur de hachage finale.
Valeur de hachage de sortie:
Utilisez Echo pour produire la valeur de hachage calculée à la ligne de commande.
Gestion des fichiers volumineux: l'utilisation de php: // stdin et hash_update_stream () est une solution idéale lorsque vous devez traiter les fichiers volumineux sans vouloir les charger complètement en mémoire. Il vous permet de lire les données étape par étape et d'effectuer des calculs de hachage.
Stream de données en temps réel: cela est également possible si vous devez hacher le flux de données en temps réel, tels que les flux de données obtenus à partir d'un appareil de connexion réseau ou de capteur.
Lorsque vous traitez avec des fichiers très volumineux, assurez-vous que le nombre d'octets lecture ( longueur ) est défini raisonnablement. Par défaut, Fread () lit jusqu'à 8192 octets de données à la fois et peut être ajusté à une valeur plus grande pour améliorer les performances si nécessaire.
Lorsque vous utilisez le streaming, assurez-vous toujours de fermer les ressources de streaming une fois l'opération terminée pour éviter la fuite des ressources.
En combinant php: // stdin et hash_update_stream () , vous pouvez gérer très efficacement les calculs de hachage de fichiers volumineux ou de données en temps réel. Cette méthode enregistre non seulement la mémoire, mais permet également des calculs de hachage simples et rapides sur la ligne de commande. Si vous travaillez sur un énorme fichier ou des données de streaming, cette méthode de streaming est fortement recommandée.
J'espère que cet article vous aidera à comprendre comment utiliser PHP pour le hachage en streaming sur la ligne de commande. Si vous avez des questions ou d'autres questions, n'hésitez pas à me poser!