W3docs

is_file()

La fonction is_file() de PHP vérifie si un chemin correspond à un fichier ordinaire. Elle retourne true pour les fichiers réguliers, false sinon.

Qu'est-ce que la fonction is_file() ?

is_file() est une fonction PHP intégrée qui indique si un chemin pointe vers un fichier ordinaire — un fichier standard sur le disque, par opposition à un répertoire, au type de cible d'un lien symbolique, ou à un fichier spécial (tube, socket ou nœud de périphérique). Elle retourne true uniquement pour les fichiers ordinaires et false pour tout le reste, y compris les chemins qui n'existent pas.

C'est la fonction à utiliser avant de tenter de lire, d'inclure ou de traiter un fichier, lorsque la question « ce chemin pointe-t-il réellement vers un fichier utilisable ? » importe plus que « ce chemin existe-t-il tout simplement ? ».

Syntaxe

is_file(string $filename): bool
  • $filename — le chemin à vérifier. Il peut être relatif (résolu par rapport au répertoire de travail courant) ou absolu.
  • Valeur de retourtrue si $filename existe et est un fichier ordinaire, false sinon. Aucun avertissement n'est émis si le fichier est absent ; on obtient simplement false.

Exemple de base

php— editable, runs on the server

L'utilisation de __FILE__ (le chemin absolu du script en cours d'exécution) garantit que la vérification réussit, de sorte que le script affiche un message confirmant que le chemin est un fichier ordinaire. Remplacez par n'importe quel autre chemin — un chemin inexistant ou un répertoire retourne false.

is_file() vs file_exists() vs is_dir()

Ces trois fonctions se chevauchent, et choisir la mauvaise est une source fréquente de bogues :

FonctionRetourne true pour
is_file()les fichiers ordinaires uniquement
file_exists()les fichiers et les répertoires
is_dir()les répertoires uniquement

Le piège principal : file_exists('/some/folder') est true pour un répertoire. Si vous tentez ensuite d'utiliser fopen() ou include dessus en tant que fichier, vous obtenez une erreur. Utilisez is_file() chaque fois que l'étape suivante suppose un fichier réel :

<?php

$path = sys_get_temp_dir(); // a directory that definitely exists

var_dump(file_exists($path)); // bool(true)  — it exists
var_dump(is_file($path));     // bool(false) — but it is NOT a file
var_dump(is_dir($path));      // bool(true)  — it is a directory

Protéger une lecture de fichier

Un usage typique en production : vérifier que le chemin est un fichier utilisable avant de le lire. Combiner is_file() avec is_readable() permet d'éviter à la fois les erreurs « n'est pas un fichier » et « pas de permission » :

<?php

$path = __FILE__;

if (is_file($path) && is_readable($path)) {
    echo "Safe to read: " . basename($path);
} else {
    echo "Cannot read that path.";
}

Ce code affiche un résultat du style Safe to read: is-file.mdx (le nom de base du script en cours d'exécution), et court-circuite proprement si le chemin est un répertoire, est absent ou n'est pas lisible.

Le piège du cache stat

PHP met en cache les résultats des vérifications du système de fichiers comme is_file() pendant la durée d'une requête afin d'éviter des accès répétés au disque. Si un fichier est créé ou supprimé après que PHP a déjà vérifié le même chemin, un second appel à is_file() peut retourner la réponse périmée mise en cache. Lorsqu'un résultat récent est nécessaire — par exemple dans un script à longue durée de vie qui crée un fichier et le re-vérifie immédiatement — videz d'abord le cache :

<?php

clearstatcache();          // discard cached stat results
var_dump(is_file($path));  // now reflects the current state on disk

Pièges courants

  • Ce n'est pas une vérification de sécurité. Un chemin peut passer is_file() tout en étant illisible ou non inscriptible. Combinez-le avec is_readable() ou is_writable() avant d'agir.
  • Les liens symboliques sont suivis. is_file() vérifie la cible d'un lien symbolique, et non le lien lui-même. Un lien symbolique pointant vers un fichier ordinaire retourne true.
  • Aucun avertissement pour les chemins inexistants. Contrairement à l'ouverture d'un fichier, un chemin inexistant retourne simplement false, donc is_file() peut être appelé sans supprimer les erreurs.

Conclusion

is_file() répond à une question précise — « est-ce un fichier ordinaire ? » — et constitue le bon garde-fou à placer devant tout code qui lit, inclut ou traite un fichier. Utilisez file_exists() lorsqu'un répertoire serait également acceptable, is_dir() lorsque vous souhaitez spécifiquement un dossier, et combinez is_file() avec les vérifications de lisibilité ci-dessus lorsque les permissions sont importantes.

Pratique

Pratique
Que fait la fonction PHP 'is_file()' ?
Que fait la fonction PHP 'is_file()' ?
Was this page helpful?