Dans le développement réel, l'empreinte digitale de fichier (valeur de hachage de fichiers) est une exigence courante, utilisée pour vérifier l'intégrité du fichier, empêcher la falsification ou implémenter la déduplication des fichiers et d'autres fonctions. PHP fournit une puissante fonction intégrée MD5_FILE () , qui peut facilement obtenir la valeur de hachage MD5 d'un fichier. Combiné avec la fonction scandir () , la génération d'empreintes digitales par lots de tous les fichiers dans un répertoire spécifié peut être facilement réalisée.
Cet article introduira en détail comment utiliser md5_file () et scandir () pour réaliser la génération par lots d'empreintes digitales de fichiers et donner un exemple de code complet.
md5_file (String $ nom de fichier): chaîne | false
Calcule la valeur de hachage MD5 du fichier spécifié, renvoie une chaîne 32 bits et renvoie false si la lecture échoue.
Scandir (String $ Directory, int $ tri_order = scandir_sort_ascences): array | false
Obtient tous les fichiers et sous-répertoires dans le répertoire spécifié et renvoie un tableau contenant des noms de fichiers.
Utilisez Scandir () pour obtenir tous les fichiers et noms de dossiers dans le répertoire cible.
Filtrez les répertoires spéciaux . Et ... dans les articles de répertoire.
Itérez sur tous les fichiers et utilisez md5_file () pour obtenir son empreinte digitale MD5.
Stocke le nom de fichier et la valeur MD5 correspondante au tableau ou à la sortie.
<?php
$directory = '/path/to/your/files'; // Remplacez-le par le chemin du répertoire que vous souhaitez scanner
// Scanner le répertoire
$files = scandir($directory);
if ($files === false) {
die('La lecture du répertoire a échoué');
}
$fileHashes = [];
foreach ($files as $file) {
// Filtrer '.' et '..'
if ($file === '.' || $file === '..') {
continue;
}
$filePath = $directory . DIRECTORY_SEPARATOR . $file;
// Processus uniquement les fichiers,Ignorer les sous-répertoires
if (is_file($filePath)) {
$hash = md5_file($filePath);
if ($hash !== false) {
$fileHashes[$file] = $hash;
} else {
$fileHashes[$file] = 'La lecture a échoué';
}
}
}
// Résultat de sortie
foreach ($fileHashes as $filename => $md5) {
echo "nom de fichier:{$filename},MD5 empreinte digitale:{$md5}" . PHP_EOL;
}
?>
Le chemin du répertoire doit être écrit comme le chemin réel sur le serveur pour s'assurer que le script PHP a la permission de lire le répertoire.
Cet exemple de code ne traite que la première couche de fichiers dans le répertoire spécifié et ne revient pas aux sous-répertoires. Si une récursivité est requise, elle peut être mise en œuvre en conjonction avec des fonctions récursives ou uniterectoryiterator récursive .
MD5_FILE () convient à la génération rapide d'empreintes digitales de petits fichiers. Il est recommandé d'utiliser des morceaux pour calculer les valeurs de hachage pour éviter les débordements de mémoire.
Parfois, nous devons générer des empreintes digitales sur des fichiers distants. Bien que MD5_FILE () prenne en charge les URL de fichier distant, il peut échouer si le serveur distant restreint l'accès. Il est recommandé de télécharger le fichier dans le répertoire temporaire local avant de calculer.
Exemple (schéma):