HOWTO · PHP

Comprueba si el archivo existe en PHP

Este artículo introduce cómo comprobar si un archivo existe en PHP. Incluye la función file_exists().

En esta página

Usa file_exists() de PHP para comprobar si una ruta apunta en ese momento a un archivo o directorio existente. Devuelve un valor booleano, así que puedes elegir qué hacer según el resultado. La comprobación describe la ruta en ese instante; no garantiza que una operación posterior con el archivo vaya a funcionar.

Comprueba si existe una ruta con file_exists()

Pasa la ruta como una cadena. Este ejemplo autónomo crea un archivo temporal, lo comprueba y después lo elimina, por lo que la rama de éxito no depende de que ya exista un archivo en el proyecto.

Ejecuta este ejemplo. Sus mensajes posibles son “File is ready.” y “File was not found.”; las etiquetas permanecen en inglés.

$directory = sys_get_temp_dir() . DIRECTORY_SEPARATOR . 'file-exists-' . uniqid('', true);
mkdir($directory);
$file = $directory . DIRECTORY_SEPARATOR . 'example.txt';
file_put_contents($file, 'Ready');

if (file_exists($file)) {
    echo "File is ready.\n";
} else {
    echo "File was not found.\n";
}

unlink($file);
rmdir($directory);

Aquí no se afirma un resultado observado. En tu propio código, usa el mismo patrón condicional con la ruta que quieras comprobar. Un resultado true significa que la ruta existe; false significa que PHP no la encontró al hacer esa comprobación.

Distingue entre archivos y directorios

file_exists() también devuelve true para un directorio. Si el siguiente paso requiere específicamente un directorio, compruébalo con is_dir(); para verificar que se trata de un archivo normal, usa is_file(). Estas comprobaciones responden a preguntas distintas: saber que una ruta existe no permite determinar su tipo.

El ejemplo contiene mensajes posibles en inglés, como “The path is a directory.”; las etiquetas visibles del código permanecen en inglés.

$path = __DIR__ . DIRECTORY_SEPARATOR . 'uploads';

if (is_dir($path)) {
    echo 'The path is a directory.';
} elseif (is_file($path)) {
    echo 'The path is a file.';
} else {
    echo 'No file or directory was found at this path.';
}

La ruta se construye a partir de __DIR__, que se refiere al directorio que contiene el archivo PHP actual. Cambia el último componente de la ruta por la ubicación que tu aplicación necesite comprobar.

Maneja las rutas y los resultados de forma segura

Una ruta relativa se interpreta en el contexto del proceso PHP en ejecución, así que la misma cadena puede señalar ubicaciones distintas si cambia el directorio de trabajo. Una ruta absoluta comienza en la raíz del sistema de archivos y especifica claramente la ubicación prevista. Si una ruta relativa produce un resultado inesperado, inspecciona la ruta que está usando PHP; por ejemplo, durante el diagnóstico puedes combinarla con getcwd(), o construirla a partir de un directorio conocido, como __DIR__.

Usa la comprobación para elegir un siguiente paso razonable, pero trata la operación como algo que puede fallar. La ruta puede cambiar después de comprobarla, y su existencia no demuestra que el proceso pueda leerla, escribir en ella ni utilizarla de otra manera. Comprueba también el resultado de la operación y gestiona el fallo según las necesidades de la aplicación.

Limitaciones habituales y solución de problemas

Si file_exists() devuelve false de forma inesperada, verifica la escritura y la construcción de la ruta y confirma que apunta a la ubicación prevista en el entorno del proceso PHP. Considera también si la ruta cambió entre comprobaciones o si el proceso en ejecución puede inspeccionar la ubicación correspondiente del sistema de archivos. La función informa del resultado de su comprobación de existencia de la ruta; no diagnostica por qué obtuvo false.

El manual de PHP describe file_exists() como una comprobación de si existe un archivo o directorio, y señala que el resultado depende del contexto del sistema de archivos configurado. No la trates como una comprobación de disponibilidad de recursos remotos; usa el mecanismo específico del protocolo o servicio correspondiente. Consulta el manual de PHP sobre file_exists() para ver el parámetro, el valor devuelto y las notas de la función.

Si haces comprobaciones repetidas, no des por sentado que un resultado anterior sigue vigente. Cuando sea posible, realiza directamente la operación que necesitas y gestiona su resultado. Así, el programa seguirá siendo correcto aunque el sistema de archivos cambie entre la comprobación y la operación.