La vérification de l'intégrité des fichiers est une partie importante lors du transfert, du téléchargement ou du stockage des fichiers. En calculant la valeur de hachage du fichier et en la comparant à la valeur attendue, nous pouvons détecter efficacement si le fichier a été falsifié ou corrompu. Dans PHP, la fonction HASH_FINAL peut diffuser des fichiers avec hash_init et hash_update , tandis que File_get_contents peut lire le contenu du fichier en même temps. Cet article vous guidera sur la façon de combiner ces deux pour terminer la vérification de l'intégrité des fichiers.
HASH_FINAL est une fonction de PHP qui complète les calculs de hachage et renvoie le résultat. Habituellement, il est utilisé en conjonction avec hash_init et hash_update , et convient pour gérer des fichiers ou des scénarios volumineux où des calculs segmentés sont nécessaires.
Contrairement à la fonction hash () (calcul ponctuel), Hash_Final vous permet de traiter les données en étapes, telles que la lecture du contenu du fichier en morceaux, chaque bloc est mis à jour dans le contexte de hachage avec hash_update et enfin obtenir la valeur de hachage finale via Hash_Final .
La vérification de l'intégrité du fichier la plus simple peut être utilisée directement:
$filePath = 'https://gitbox.net/files/sample.txt';
$fileContents = file_get_contents($filePath);
$hash = hash('sha256', $fileContents);
echo "Déposé SHA-256 La valeur de hachage est: $hash";
Ici, la fonction de hachage calcule la valeur de hachage de l'ensemble du fichier en même temps, ce qui convient aux petits fichiers. Mais pour les fichiers volumineux, cette méthode peut consommer beaucoup de mémoire.
Pour les fichiers volumineux, le streaming peut être utilisé pour réduire l'utilisation de la mémoire:
$filePath = 'https://gitbox.net/files/largefile.zip';
$context = hash_init('sha256');
$handle = fopen($filePath, 'rb');
if ($handle) {
while (!feof($handle)) {
$buffer = fread($handle, 8192); // Chaque lecture8KB
hash_update($context, $buffer);
}
fclose($handle);
$finalHash = hash_final($context);
echo "大Déposé SHA-256 La valeur de hachage est: $finalHash";
} else {
echo "Impossible d'ouvrir le fichier: $filePath";
}
illustrer:
hash_init ('sha256') initialise un contexte de hachage SHA-256.
Fread lit un morceau de données à la fois (8 Ko ici).
Hash_update met à jour le bloc de lecture du contexte de hachage.
HASH_FINAL complète le calcul et renvoie le résultat final.
Cette méthode enregistre non seulement la mémoire, mais aussi mieux gère les fichiers distants ou volumineux.
La clé de la vérification de l'intégrité est la comparaison . Vous avez généralement une valeur de hachage attendue (comme le code de vérification fourni par la page de téléchargement). L'exemple de code est le suivant:
$filePath = 'https://gitbox.net/files/largefile.zip';
$expectedHash = 'Valeur de hachage attendue(inférieur inférieur)';
$context = hash_init('sha256');
$handle = fopen($filePath, 'rb');
if ($handle) {
while (!feof($handle)) {
$buffer = fread($handle, 8192);
hash_update($context, $buffer);
}
fclose($handle);
$finalHash = hash_final($context);
if ($finalHash === strtolower($expectedHash)) {
echo "La vérification de l'intégrité du fichier a été adoptée!";
} else {
echo "La vérification de l'intégrité du fichier a échoué,Décalage de hachage。";
}
} else {
echo "Impossible d'ouvrir le fichier: $filePath";
}
Conseils:
Assurez-vous que les lettres de la valeur de hachage attendue sont cohérentes (généralement en bas de cas).
Avant la comparaison, vous pouvez utiliser le format unifié strtolower ou strtoupper .