Position actuelle: Accueil> Derniers articles> Pourquoi md5_file () revient-il faux?

Pourquoi md5_file () revient-il faux?

M66 2025-06-03

Dans PHP, md5_file () est une fonction très pratique pour calculer la valeur de hachage MD5 d'un fichier. Sa syntaxe de base est la suivante:

 md5_file(string $filename, bool $binary = false): string|false

Cette fonction prend un chemin de fichier comme argument et renvoie la somme de contrôle MD5 du fichier (par défaut est une chaîne au format hexadécimal). Cependant, de nombreux développeurs rencontreront des situations où le faux est renvoyé lors de l'utilisation de md5_file () , ce qui signifie souvent que certaines erreurs se sont produites. Cet article analysera les raisons qui pourraient provoquer cette situation sous plusieurs angles.

1. Erreur de chemin de fichier

C'est l'une des raisons les plus courantes. Si le chemin de fichier fourni est incorrect, qu'il s'agisse d'une faute de frappe, d'un mauvais format de chemin ou d'un répertoire qui n'existe pas, md5_file () échouera et renvoie faux .

Exemple:

 $hash = md5_file('/path/to/nonexistent/file.txt');

Ici, si file.txt n'existe pas, ou si le chemin est incorrectement orthographié, FALSE sera renvoyé.

2. Autorisations de fichiers insuffisantes

Même si le chemin du fichier est correct, md5_file () renvoie false si l'utilisateur en cours d'exécution (généralement un utilisateur de serveur Web, tel que www-data ) où le script PHP est situé n'a pas l'autorisation de lire le fichier cible.

Solution:

Vous pouvez vous assurer que PHP a des autorisations suffisantes pour lire le fichier en modifiant les autorisations de fichier ou l'utilisateur à laquelle vous appartenez.

 chmod 644 /path/to/file.txt
chown www-data:www-data /path/to/file.txt

3. Le fichier est verrouillé par d'autres processus

Certains systèmes d'exploitation et systèmes de fichiers empêchent d'autres programmes de lire le fichier lorsqu'ils sont écrits ou verrouillés par d'autres programmes. Dans ce cas, si md5_file () essaie de lire le fichier, il peut également retourner faux .

Exemple:

Par exemple, un fichier téléchargé par FTP ou écrit dans un autre script, PHP peut rencontrer des problèmes d'échec de lecture.

4. L'URL est utilisée à la place du chemin local

MD5_FILE () de PHP prend en charge théoriquement l'utilisation de l'URL comme paramètre après activité via le paramètre allow_url_fopen . Mais en fait, cette méthode est sujette aux erreurs, surtout lorsque le serveur distant renvoie un code d'état d'erreur ou que le contenu est grand et lent.

Exemple:

 $hash = md5_file('https://m66.net/uploads/example.zip');

Ce code ne peut s'exécuter avec succès que si Allow_URL_FOPEN est défini sur ON . Sinon, False sera retourné.

Vous pouvez confirmer la configuration dans le code à l'aide de la méthode suivante:

 if (!ini_get('allow_url_fopen')) {
    echo "Fonction d'accès à fichiers distantes non activée";
}

Suggestion: Évitez de compter sur les URL distantes. Il sera plus sûr de télécharger le fichier temporaire local via File_get_Contents () d'abord, puis d'utiliser md5_file () .

5. Le fichier est vide ou corrompu

Bien que md5_file () puisse gérer les fichiers vides, parfois, si le fichier est tronqué ou corrompu (en particulier les fichiers binaires), il peut entraîner des exceptions de lecture. Ce n'est pas courant, mais l'état du fichier peut être détecté manuellement par FileSize () ou fopen () + Fread () .

6. Le chemin contient des caractères spéciaux ou un codage incohérent

Lorsque le chemin de fichier contient des caractères non UTF-8 (en particulier sur les systèmes Windows) ou que le chemin est construit lorsqu'il est téléchargé par l'utilisateur (tel que chinois, espaces ou symboles spéciaux), le chemin peut être mal analysé.

Exemple:

 $hash = md5_file('/var/www/uploads/documentA.txt'); // Le codage de chemin peut être incohérent

Utiliser RealPath () pour contourner ces problèmes est un bon moyen:

 $path = realpath('/var/www/uploads/documentA.txt');
$hash = md5_file($path);

7. Les fichiers temporaires ont été supprimés ou déplacés

Lorsque vous utilisez move_uploaded_file () , tmpfile () , ou certains fichiers de chemin temporaires générés automatiquement, ces fichiers peuvent être supprimés, déplacés ou dépassés leur durée de vie pendant le fonctionnement, ce qui fait échouer MD5_FILE () lors de la lecture.