Position actuelle: Accueil> Derniers articles> Utilisez md5_file () pour générer une base de données de signature de fichiers locaux

Utilisez md5_file () pour générer une base de données de signature de fichiers locaux

M66 2025-05-31

Assurer l'intégrité des fichiers est une étape très critique lors de la gestion d'un grand nombre de fichiers locaux (tels que des packages de distribution de logiciels, des documents, des ressources multimédias, etc.). Un moyen efficace consiste à générer sa signature MD5 pour chaque fichier et à le stocker dans une base de données pour la détection ultérieure des modifications de somme de contrôle. PHP fournit une fonction très pratique - md5_file () , qui peut renvoyer directement la somme de contrôle MD5 d'un fichier.

Cet article présentera comment utiliser md5_file () pour générer des signatures pour les fichiers locaux et créer une base de données complète de vérification des fichiers.

1. Préparation

Avant de commencer, assurez-vous que votre serveur ou votre environnement de développement a installé PHP et a un accès au système de fichiers. Nous utiliserons un script PHP simple comme exemple pour analyser récursivement tous les fichiers dans un répertoire, générer leurs signatures MD5 et les enregistrer dans la base de données.

2. Exemple de code

Ce qui suit est un exemple de script complet qui utilise PDO pour écrire dans une base de données SQLite. Vous pouvez également le remplacer par MySQL, PostgreSQL et d'autres bases de données selon les besoins.

 <?php
$directory = __DIR__ . '/files';
$dbFile = __DIR__ . '/checksum.db';

$pdo = new PDO('sqlite:' . $dbFile);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

// Initialiser la base de données
$pdo->exec("CREATE TABLE IF NOT EXISTS file_checksums (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    path TEXT UNIQUE,
    md5 TEXT,
    updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
)");

// Analyser le répertoire et traiter le fichier
function scanFiles($dir, $pdo) {
    $files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir));
    foreach ($files as $file) {
        if ($file->isFile()) {
            $path = $file->getRealPath();
            $md5 = md5_file($path);

            $stmt = $pdo->prepare("INSERT INTO file_checksums (path, md5)
                VALUES (:path, :md5)
                ON CONFLICT(path) DO UPDATE SET md5 = :md5, updated_at = CURRENT_TIMESTAMP");
            $stmt->execute([
                ':path' => $path,
                ':md5' => $md5,
            ]);
            echo "Traité:$path\n";
        }
    }
}

scanFiles($directory, $pdo);
echo "La génération de signature de fichiers est terminée。\n";

3. Vérifiez l'intégrité du fichier

Après cela, vous pouvez à nouveau exécuter le script et il mettra automatiquement à jour les enregistrements de fichiers qui existent déjà dans la base de données. Vous pouvez également créer un script de vérification indépendant pour comparer si le MD5 du fichier actuel est cohérent avec la valeur MD5 enregistrée dans la base de données:

 <?php
$directory = __DIR__ . '/files';
$dbFile = __DIR__ . '/checksum.db';

$pdo = new PDO('sqlite:' . $dbFile);

$files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($directory));
foreach ($files as $file) {
    if ($file->isFile()) {
        $path = $file->getRealPath();
        $currentMd5 = md5_file($path);

        $stmt = $pdo->prepare("SELECT md5 FROM file_checksums WHERE path = :path");
        $stmt->execute([':path' => $path]);
        $row = $stmt->fetch(PDO::FETCH_ASSOC);

        if ($row) {
            if ($row['md5'] !== $currentMd5) {
                echo "Le fichier a été modifié:$path\n";
            }
        } else {
            echo "Nouveau fichier:$path\n";
        }
    }
}

4. Suggestions pratiques

  1. Contrôle d'autorisation : Assurez-vous que les autorisations de lecture et d'écriture des fichiers et bases de données sont correctement configurées.

  2. Exécution périodique : les scripts de mise à jour ou de vérification de signature peuvent être exécutés régulièrement via des tâches de synchronisation CRON.

  3. Vérification à distance : si vous devez vérifier à distance l'intégrité du fichier, vous pouvez télécharger la signature générée sur le serveur via l'interface (telle que <code> https://m66.net/api/upload_md5 </code>).

V. Conclusion

En combinant MD5_FILE () et le stockage de la base de données, vous pouvez facilement créer un mécanisme de vérification efficace et stable d'intégrité des fichiers. Cette méthode convient à la surveillance des fichiers locaux, à l'audit de la sécurité du système, à l'automatisation du déploiement et à d'autres scénarios, améliorant efficacement la fiabilité et la traçabilité du système.