Avatar ·

Cómo verificar la existencia de una carpeta en PHP: ¿is_dir, file_exists o ambos?

¡Hola a todos! Soy nuevo en PHP y estoy escribiendo un script para subir archivos al servidor. Necesito verificar si existe el directorio donde guardaré los archivos. Si no existe, crearlo.

Me encontré con dos funciones: is_dir() y file_exists(). Y ahora no entiendo cuál usar. Aquí está mi código:

$path = '/uploads/images/';

// Opción 1
if (is_dir($path)) {
    echo "La carpeta existe";
} else {
    mkdir($path, 0777, true);
}

// Opción 2
if (file_exists($path)) {
    echo "La carpeta existe";
} else {
    mkdir($path, 0777, true);
}

Ambas opciones parecen funcionar, pero noté un comportamiento extraño. Si especificas la ruta a un archivo en lugar de a una carpeta, file_exists() devuelve true, mientras que is_dir() devuelve false. Esto es confuso.

También leí que file_exists() almacena en caché los resultados, lo que puede provocar errores. Y is_dir() no lo hace. Pero no estoy seguro.