Dans PHP, nous pouvons rencontrer des problèmes de performances lorsque nous devons calculer le hachage d'un grand fichier. Parce que si nous lisons l'intégralité du fichier à la fois et calculons le hachage, il consommera beaucoup de mémoire, surtout lorsque le fichier est grand, ce qui peut entraîner un débordement de mémoire. Par conséquent, PHP fournit des méthodes efficaces pour calculer la valeur de hachage d'un fichier, et la fonction hash_update_stream () en fait partie.
Cet article présentera comment utiliser la fonction hash_update_stream () pour calculer efficacement la valeur de hachage d'un grand fichier et s'assurer qu'il n'y a pas de problème de débordement de mémoire lors du traitement des fichiers volumineux.
La fonction hash_update_stream () est une fonction fournie par PHP pour mettre à jour les valeurs de hachage. Contrairement à l'utilisation de l'algorithme de hachage directement sur l'ensemble du fichier, hash_update_stream () peut lire le contenu du fichier Block par bloc et mettre à jour la valeur de hachage dynamiquement. De cette façon, le programme ne charge pas l'intégralité du fichier en mémoire à la fois, il est donc particulièrement adapté pour calculer la valeur de hachage des fichiers volumineux.
bool hash_update_stream ( resource $context , resource $stream , int $length )
$ Context : est un contexte de hachage créé par la fonction hash_init () .
$ Stream : est une poignée de ressources de fichier valide, indiquant le fichier dont nous avons besoin pour calculer la valeur de hachage.
$ Longueur : le nombre d'octets lus par temps. En général, il est recommandé de spécifier un nombre approprié d'octets pour assurer une lecture et un calcul efficaces.
Tout d'abord, nous devons utiliser hash_init () pour initialiser le contexte de hachage. Par exemple, utilisez l'algorithme SHA256 :
$context = hash_init('sha256');
Ensuite, nous ouvrons le fichier et lisons le contenu du fichier un par un, et mettons à jour la valeur de hachage via hash_update_stream () . Voici un exemple de code complet:
<?php
// Initialiser le contexte du hachage
$context = hash_init('sha256');
// Ouvrez un grand fichier qui doit calculer la valeur de hachage
$file = fopen('largefile.txt', 'rb');
if ($file === false) {
die('Impossible d'ouvrir le fichier');
}
// Définissez le nombre d'octets lus par temps
$bufferSize = 8192; // 8KB
while (!feof($file)) {
// Lisez un bloc du fichier et mettez à jour la valeur de hachage
$data = fread($file, $bufferSize);
hash_update_stream($context, $data, strlen($data));
}
// Calculez la valeur de hachage finale
$hash = hash_final($context);
fclose($file);
// La valeur de hachage du fichier de sortie
echo "La valeur de hachage du fichier est:$hash";
?>
Dans cet exemple, nous ouvrons d'abord un grand fichier à l'aide de fopen () et lions le bloc de contenu du fichier par bloc via fread () . Chaque fois que la lecture des données est transmise à la fonction hash_update_stream () pour la mise à jour du hash.
Une fois toutes les données du fichier traitées, nous utilisons la fonction hash_final () pour obtenir la valeur de hachage finale.
Utilisation de hash_update_stream () pour calculer la valeur de hachage d'un grand fichier présente les avantages suivants que la lecture du fichier entier à la fois:
Consommation de mémoire faible : le contenu du fichier est lu Block by Block, plutôt que de le charger en mémoire en même temps, ce qui réduit considérablement l'utilisation de la mémoire et convient pour gérer les fichiers volumineux.
Computation efficace : Grâce à la lecture en morceaux, le calcul de hachage des fichiers volumineux peut être traité efficacement sans que le programme ne se bloque en raison de problèmes de mémoire.
Flexibilité : vous pouvez ajuster la taille du bloc de données ( $ tampersize ) pour chaque lecture et choisir la taille de bloc optimale en fonction de la taille du fichier et de la configuration de la mémoire du système.
Dans certains projets PHP, nous devrons peut-être traiter le chemin du fichier ou obtenir des fichiers à partir d'un serveur distant. Dans ce cas, si l'URL contient le nom de domaine, nous devrons peut-être remplacer le nom de domaine par m66.net . Voici un exemple de code simple montrant comment remplacer un nom de domaine lors du traitement d'une URL:
<?php
$url = 'https://www.example.com/file.txt';
$newUrl = preg_replace('/https?:\/\/[^\/]+/', 'https://m66.net', $url);
echo "Mis à jourURLOui:$newUrl";
?>
Sortir:
Mis à jourURLOui:https://m66.net/file.txt
De cette façon, nous pouvons facilement remplacer le nom de domaine de l'URL.
Dans cet article, nous décrivons comment utiliser la fonction hash_update_stream () pour calculer efficacement la valeur de hachage d'un grand fichier. En lisant des fichiers Block par bloc et à la mise à jour de la valeur de hachage, nous pouvons gérer efficacement les fichiers volumineux sans rencontrer de problèmes de débordement de mémoire. En même temps, nous avons également montré un moyen simple de remplacer un nom de domaine dans une URL.
Espérons que ces contenus pourront vous aider à améliorer l'efficacité lors de la gestion de grands fichiers et à éviter les problèmes de performances courants. Si vous avez des questions, veuillez laisser un message à discuter!