Dans PHP, la fonction md5_file () est utilisée pour calculer la valeur de hachage MD5 d'un fichier spécifié, qui est généralement utilisé pour vérifier l'intégrité du fichier. Théoriquement, le même fichier doit être calculé plusieurs fois à l'aide de la fonction md5_file () et la même valeur de hachage doit être obtenue. Mais si vous constatez que la valeur de hachage générée est différente à chaque fois, elle peut être causée par les raisons suivantes:
La raison la plus courante est que le contenu du fichier calculé lui-même change. Par exemple, les fichiers journaux, les fichiers de cache, les fichiers temporaires, etc., le contenu du fichier peut être écrit ou modifié lorsque le programme est en cours d'exécution, ce qui entraîne différentes valeurs MD5 calculées à chaque fois.
<?php
$hash = md5_file("http://m66.net/path/to/file.txt");
echo "MD5: " . $hash;
?>
Si le fichier est généré dynamiquement ou mis à jour fréquemment, la valeur de hachage est naturellement incohérente.
MD5_FILE () peut accepter des chemins de fichier ou des URL ( Allow_URL_FOPEN doit être activé). Si vous transmettez une URL qui génère du contenu dynamiquement, tel que le contenu de fichier renvoyé par l'interface API ou certaines URL avec des paramètres, le contenu peut être différent à chaque fois que vous le demandez, résultant en une valeur de hachage différente.
<?php
$url = "http://m66.net/api/getfile.php?timestamp=" . time();
$hash = md5_file($url);
echo "MD5: " . $hash;
?>
Dans l'exemple ci-dessus, l'URL a un paramètre d'horodatage et le contenu est différent à chaque fois que vous le demandez.
Lors de la lecture de fichiers via des URL, des modifications instables et partielles de perte de données ou de codage peuvent se produire pendant la transmission du réseau, ce qui entraîne différents contenus des fichiers de lecture réels et donc différentes valeurs de hachage.
Si PHP rencontre des problèmes d'autorisation lors de la lecture d'un fichier ou que le fichier ne soit pas entièrement lu avec succès, certains messages de contenu ou d'erreur peuvent être renvoyés, affectant le résultat du hachage.
<?php
$file = "/path/to/file.txt";
if (is_readable($file)) {
$hash = md5_file($file);
echo "MD5: " . $hash;
} else {
echo "Fichier non lisible";
}
?>
Il est très important de confirmer que les autorisations et les chemins de fichiers sont corrects.
Si le fichier est un fichier texte, différents encodages (tels que UTF-8 avec BOM et sans bom) ou des caractères Newline (Windows ' \ r \ n et Unix's \ n ), le contenu sera réellement différent et la valeur de hachage sera naturellement différente.
En résumé, si la valeur de hachage renvoyée par md5_file () est différente à chaque fois, confirmez d'abord si le contenu du fichier de lecture est stable, confirmez si le chemin de lecture pointe vers la même ressource fixe, vérifiez les problèmes de réseau et d'autorisation, et enfin prêter attention à si le codage et le format du contenu de fichier sont cohérents.