is_dir()
La fonction is_dir() est une fonction PHP intégrée qui vérifie si un chemin donné est un répertoire et retourne true si c'est le cas.
Qu'est-ce que la fonction is_dir() ?
La fonction is_dir() est une fonction PHP intégrée qui indique si un chemin donné existe et pointe vers un répertoire (dossier). Elle retourne true lorsque le chemin est un répertoire existant, et false dans tous les autres cas — un fichier ordinaire, un chemin qui n'existe pas, ou un chemin pour lequel vous n'avez pas la permission de lecture.
C'est l'une des fonctions PHP de « vérification de type » du système de fichiers, aux côtés de is_file(), is_link() et file_exists(). Utilisez is_dir() chaque fois que vous devez confirmer qu'un répertoire est présent avant de le lire, d'y écrire ou de le créer.
Syntaxe
is_dir(string $filename): bool$filename— le chemin à tester. Il peut être absolu (/var/www/uploads) ou relatif au répertoire de travail courant du script (uploads). Un slash final est autorisé.- Valeur de retour —
truesi$filenameexiste et est un répertoire, sinonfalse.
Exemple de base
__DIR__ est une constante magique qui pointe toujours vers un répertoire existant, donc cet exemple affiche de manière fiable la branche « is a directory ».
Distinguer un répertoire d'un fichier
L'utilisation la plus courante de is_dir() consiste à bifurquer selon ce qu'est réellement un chemin. Comparez-la avec is_file() :
<?php
$paths = [__DIR__, __FILE__, '/path/that/does/not/exist'];
foreach ($paths as $path) {
if (is_dir($path)) {
echo "$path -> directory\n";
} elseif (is_file($path)) {
echo "$path -> file\n";
} else {
echo "$path -> missing\n";
}
}__FILE__ est le chemin complet du script courant, donc il est signalé comme un fichier, tandis que le chemin inventé est signalé comme manquant.
Utilisation pratique : créer le répertoire uniquement s'il est absent
Protéger mkdir() avec is_dir() évite un avertissement lorsque le dossier existe déjà :
<?php
$dir = sys_get_temp_dir() . '/my_app_cache';
if (!is_dir($dir)) {
mkdir($dir, 0755, true); // true = create parent dirs too
echo "Created: $dir";
} else {
echo "Already exists: $dir";
}Pièges courants
is_dir()retournefalse, pas une erreur, lorsque le chemin n'existe pas. Un résultatfalsene signifie pas « c'est un fichier » — le chemin peut simplement être absent. Utilisezfile_exists()si vous voulez seulement savoir si quelque chose est présent.- Les liens symboliques sont suivis. Si le chemin est un lien symbolique pointant vers un répertoire,
is_dir()retournetrue. Pour détecter le lien lui-même, utilisezis_link(). - Les résultats sont mis en cache. PHP met en cache les résultats de stat(), donc si un répertoire est créé ou supprimé par un autre processus en cours d'exécution du script, vous pouvez obtenir une réponse obsolète. Appelez
clearstatcache()pour forcer une vérification fraîche. - Les chemins relatifs dépendent du répertoire de travail.
is_dir('data')est résolu par rapport au répertoire de travail courant (getcwd()), pas à l'emplacement du script. Utilisez__DIR__ . '/data'lorsque vous voulez dire « à côté de ce script ».
Fonctions associées
| Fonction | Vérifie |
|---|---|
is_file() | Un fichier ordinaire |
is_link() | Un lien symbolique |
file_exists() | L'existence d'un fichier ou d'un répertoire |
is_readable() | Un chemin lisible |
scandir() | Le contenu d'un répertoire |
mkdir() | La création d'un répertoire |
Conclusion
is_dir() est la manière sûre et standard de confirmer qu'un chemin est un répertoire existant avant d'agir dessus. Gardez à l'esprit qu'elle suit les liens symboliques, met ses résultats en cache, et résout les chemins relatifs par rapport au répertoire de travail courant — l'associer à file_exists(), is_file() et mkdir() couvre presque toutes les situations de gestion de répertoires que vous rencontrerez.