Au cours du processus de développement, il est courant de déterminer si le contenu du fichier est dupliquée. Par exemple, lors de la gestion des téléchargements de fichiers, du stockage de fichiers ou de la prévention du contenu en double, nous devons être en mesure de déterminer efficacement si le contenu du fichier est le même. PHP fournit de nombreux outils pour atteindre cet objectif, et la fonction hash_update_stream est une méthode très pratique, en particulier lorsqu'il s'agit de fichiers volumineux, il peut calculer efficacement la valeur de hachage du fichier et nous aider à déterminer rapidement si le fichier est dupliqué.
hash_update_stream est une fonction de hachage intégrée à PHP, qui nous permet de hacher un flux (comme un flux de fichiers). Contrairement à la méthode traditionnelle de calcul directement le hachage de l'ensemble du fichier, Hash_update_stream peut progressivement lire le flux et mettre à jour la valeur de hachage, ce qui peut éviter de charger des fichiers gros dans la mémoire à la fois, en enregistrant la mémoire et le temps de calcul.
Pour utiliser la fonction hash_update_stream pour déterminer si le fichier est dupliqué, il est généralement fait pour calculer la valeur de hachage pour chaque fichier (tel que MD5 ou SHA256), puis comparer la valeur de hachage calculée avec la valeur de hachage stockée. Si la valeur de hachage est la même, le contenu du fichier est considéré comme en double.
Tout d'abord, nous devons ouvrir le fichier et lire son contenu étape par étape, et utiliser hash_update_stream pour calculer la valeur de hachage du fichier.
<?php
// Chemin de fichier
$filePath = 'path/to/your/file.txt';
// Sélectionnez un algorithme de hachage
$hashAlgo = 'sha256'; // Vous pouvez choisir md5、sha1 Autres algorithmes
// Ouvrir le fichier
$file = fopen($filePath, 'rb');
// Initialiser les ressources de hachage
$hashContext = hash_init($hashAlgo);
// Lisez le fichier étape par étape et mettez à jour la valeur de hachage
while (!feof($file)) {
$chunk = fread($file, 1024); // Lire des blocs de fichiers,Évitez de charger des fichiers grands à la fois
hash_update_stream($hashContext, $chunk); // Mettre à jour la valeur de hachage
}
// Calculez la valeur de hachage finale
$hashValue = hash_final($hashContext);
// Fermez le fichier
fclose($file);
echo "La valeur de hachage du fichier est: $hashValue";
?>
Après avoir calculé la valeur de hachage du fichier, nous pouvons le comparer avec la valeur de hachage du fichier déjà dans la base de données ou le système de stockage pour déterminer si le fichier est dupliqué.
<?php
// Supposons que nous ayons déjà une liste de hachage stockée
$storedHashes = [
'd2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2', // Valeur de hachage de fichiers stocké
'a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3a3'
];
// Vérifiez si la valeur de hachage calculée existe dans la valeur de hachage stockée
if (in_array($hashValue, $storedHashes)) {
echo "Contenu du fichier en double!";
} else {
echo "Le contenu du fichier n'est pas répété,Prêt à télécharger ou à stocker!