is_dir()
La función is_dir() es una función PHP integrada que comprueba si una ruta dada es un directorio. Devuelve true si la ruta es un directorio.
¿Qué es la función is_dir()?
La función is_dir() es una función PHP integrada que indica si una ruta dada existe y apunta a un directorio (carpeta). Devuelve true cuando la ruta es un directorio existente, y false en cualquier otro caso — un archivo regular, una ruta que no existe, o una ruta para la que no tienes permiso de lectura.
Es una de las funciones de "comprobación de tipo" del sistema de archivos de PHP, junto con is_file(), is_link() y file_exists(). Usa is_dir() siempre que necesites confirmar que un directorio existe antes de leerlo, escribir en él o crearlo.
Sintaxis
is_dir(string $filename): bool$filename— la ruta a comprobar. Puede ser absoluta (/var/www/uploads) o relativa al directorio de trabajo actual del script (uploads). Se permite una barra diagonal al final.- Valor de retorno —
truesi$filenameexiste y es un directorio,falseen caso contrario.
Ejemplo básico
__DIR__ es una constante mágica que siempre se resuelve en un directorio existente, por lo que este ejemplo imprime de forma fiable la rama "es un directorio".
Distinguir un directorio de un archivo
El uso más habitual de is_dir() es ramificar según lo que realmente es una ruta. Compáralo con 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__ es la ruta completa del script actual, por lo que se informa como archivo, mientras que la ruta inventada se informa como ausente.
Un uso práctico: crear el directorio solo si falta
Proteger mkdir() con is_dir() evita una advertencia cuando la carpeta ya existe:
<?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";
}Errores comunes
is_dir()devuelvefalse, no un error, cuando la ruta no existe. Un resultadofalseno significa "esto es un archivo" — simplemente puede estar ausente. Usafile_exists()si solo te importa que algo esté ahí.- Los enlaces simbólicos se siguen. Si la ruta es un enlace simbólico que apunta a un directorio,
is_dir()devuelvetrue. Para detectar el propio enlace, usais_link(). - Los resultados se almacenan en caché. PHP almacena en caché los resultados de stat(), por lo que si otro proceso crea o elimina un directorio a mitad del script puede que obtengas una respuesta desactualizada. Llama a
clearstatcache()para forzar una comprobación actualizada. - Las rutas relativas dependen del directorio de trabajo.
is_dir('data')se resuelve respecto al directorio de trabajo actual (getcwd()), no a la ubicación del script. Usa__DIR__ . '/data'cuando quieras decir "junto a este script".
Funciones relacionadas
| Función | Comprueba |
|---|---|
is_file() | Un archivo regular |
is_link() | Un enlace simbólico |
file_exists() | La existencia de un archivo o directorio |
is_readable() | Una ruta legible |
scandir() | Listar el contenido de un directorio |
mkdir() | Crear un directorio |
Conclusión
is_dir() es la forma segura y estándar de confirmar que una ruta es un directorio existente antes de actuar sobre ella. Recuerda que sigue los enlaces simbólicos, almacena en caché su resultado y resuelve las rutas relativas respecto al directorio de trabajo actual — combinarlo con file_exists(), is_file() y mkdir() cubre casi todas las situaciones de manejo de directorios que encontrarás.