Les performances de PHP sont une considération importante lorsqu'ils traitent de fichiers volumineux, en particulier lorsqu'il est nécessaire de calculer la valeur de hachage du fichier. Habituellement, le calcul des valeurs de hachage de fichiers (tels que MD5 ou SHA-256) peut prendre beaucoup de temps, surtout lorsque les fichiers sont grands. Dans PHP, la fonction HASH_FINAL est une fonction clé utilisée pour compléter les calculs de hachage, ce qui peut améliorer les performances lors du traitement des fichiers volumineux. Ensuite, nous plongerons dans la façon d'utiliser la fonction HASH_FINAL et utiliserons quelques exemples pour améliorer l'efficacité lors du traitement des fichiers volumineux.
La fonction HASH_FINAL de PHP est la fonction de calcul finale du contexte de hachage. Son objectif est de transmettre les données à l'algorithme de hachage et de renvoyer la valeur de hachage finale. Généralement, Hash_Final est utilisé avec hash_init et hash_update pour former un processus complet de calcul de hachage.
hash_init () : initialise un contexte de hachage.
hash_update () : Mettez à jour le contexte du hachage et ajoutez des données étape par étape.
hash_final () : renvoie la valeur de hachage finale et libère le contexte de hachage.
Les combinaisons de ces fonctions sont très utiles pour le traitement étape par étape des fichiers volumineux, car ils ne chargent pas le fichier entier en mémoire à la fois, mais les traitent en morceaux, ce qui est crucial pour les performances de traitement des fichiers volumineux.
Voici un exemple de base montrant comment calculer les valeurs de hachage pour les fichiers volumineux à l'aide de hash_init , hash_update et hash_final .
<?php
// Définir le chemin du fichier
$filePath = 'path/to/large/file.zip'; // Veuillez modifier le chemin ici vers le chemin du grand fichier réel
// Initialiser le contexte du hachage
$hashContext = hash_init('sha256'); // utiliserSHA-256Algorithme de hachage
// Ouvrez le fichier pour la lecture
$handle = fopen($filePath, 'rb');
if ($handle === false) {
die('Impossible d'ouvrir le fichier!');
}
// Lire les fichiers par bloc et mettre à jour le contexte de hachage
while (!feof($handle)) {
$chunk = fread($handle, 8192); // Chaque lecture8KB
hash_update($hashContext, $chunk); // Mettre à jour le contexte du hachage
}
// Fermez la poignée du fichier
fclose($handle);
// Obtenez la valeur de hachage finale
$hashValue = hash_final($hashContext);
// Valeur de hachage de sortie
echo "La valeur de hachage du fichier est:$hashValue\n";
?>
Initialiser le contexte de hachage : nous utilisons la fonction hash_init pour initialiser un contexte de hachage de SHA-256. Vous pouvez également choisir d'autres algorithmes selon les besoins, tels que MD5 , Sha1 , etc.
Lire le fichier dans les blocs : lire le contenu du fichier par blocs via la fonction Fread , et 8KB est lu à chaque fois. La taille du bloc peut être redimensionnée au besoin. Les blocs de fichiers plus grands réduiront le nombre d'appels de fonction, mais peuvent augmenter l'utilisation de la mémoire.
Mettre à jour le contexte du hachage : chaque fois qu'un élément de données est lu, le hash_update est utilisé pour mettre à jour le contexte de hachage pour éviter de charger le fichier entier en mémoire à la fois.
Obtenez la valeur de hachage finale : une fois le fichier lu, utilisez la fonction hash_final pour obtenir la valeur de hachage finale et la sortir.
Lisez les fichiers par bloc : pour les grands fichiers, évitez de charger le fichier entier en mémoire à la fois. En lisant des fichiers par bloc et en mettant à jour les valeurs de hachage, l'utilisation de la mémoire peut être considérablement réduite et la vitesse de traitement peut être améliorée.
Choisissez le bon algorithme de hachage : différents algorithmes de hachage varient en performances, MD5 est généralement plus rapide, tandis que le SHA-256 est plus sûr, mais relativement lent. Lorsque vous travaillez avec des fichiers volumineux, le choix d'un algorithme de hachage approprié peut optimiser les performances.
Optimisation du flux de fichiers : utilisez des fichiers mappés de mémoire (tels que le mode RB dans FOPEN ) pour réduire la latence dans les opérations d'E / S si possible.
Traitement de parallélisation : pour des fichiers extrêmement volumineux, envisagez d'utiliser la technologie de parallélisation pour diviser le fichier en plusieurs blocs, calculez le hachage en parallèle à l'aide de plusieurs processus ou threads, et enfin fusionnez les résultats.
Supposons que vous ayez un fichier avec une grande quantité de données, vous devez calculer la valeur de hachage SHA-256 de ce fichier et vérifier le contenu du fichier ou les télécharger sur le serveur après le calcul. Dans ce processus, la fonction HASH_FINAL peut éviter efficacement le débordement de la mémoire et améliorer les performances globales en lisant des fichiers en morceaux et en calculant les valeurs de hachage.
Lors du téléchargement de fichiers, la valeur de hachage du fichier est généralement utilisée comme vérification de l'intégrité du fichier, par exemple:
<?php
// ExempleURL - Télécharger le fichier时utiliser哈希值进行验证
$uploadUrl = 'https://gitbox.net/upload_file';
// Supposons que la valeur de hachage du fichier a été calculée
$hashValue = 'Valeur de hachage du fichier calculé';
// Télécharger le fichier
$data = array('file_hash' => $hashValue);
$options = array(
'http' => array(
'method' => 'POST',
'header' => 'Content-type: application/x-www-form-urlencoded',
'content' => http_build_query($data)
)
);
$context = stream_context_create($options);
$result = file_get_contents($uploadUrl, false, $context);
echo $result;
?>
Dans cet exemple, nous envoyons la valeur de hachage calculée au serveur spécifié (dans ce cas Gitbox.net ) via une demande de poste pour garantir que le fichier n'a pas été falsifié pendant le transfert.