W3docs

file_exists()

La función file_exists() de PHP comprueba si un archivo o directorio existe y devuelve TRUE o FALSE según el resultado.

¿Qué es la función file_exists()?

La función file_exists() es una función integrada de PHP que indica si una ruta dada apunta a un archivo o un directorio en el sistema de archivos. Es una de las formas más comunes de proteger las operaciones con archivos: se llama antes de leer, escribir o eliminar para que el script no falle en una ruta inexistente.

Devuelve:

  • true si la ruta existe (ya sea un archivo normal, un directorio, un enlace simbólico u otro tipo de archivo especial), o
  • false si no existe nada en esa ruta, o si no se tienen permisos para leer la información al respecto.

Sintaxis

file_exists(string $filename): bool

$filename es la ruta a comprobar. Puede ser:

  • una ruta relativa ('data/users.csv'), resuelta respecto al directorio de trabajo actual, o
  • una ruta absoluta ('/var/www/uploads/logo.png' o 'C:\\temp\\file.txt' en Windows).

Un ejemplo básico

php— editable, runs on the server

Si myfile.txt está presente en el directorio de trabajo del script, se ejecuta la primera rama; de lo contrario, se ejecuta la rama else. Como file_exists() devuelve un boolean simple, se puede usar directamente en cualquier expresión if, && o ternaria.

Cuidado con la caché de estadísticas

PHP almacena en caché el resultado de las comprobaciones del sistema de archivos (incluida file_exists()) para evitar acceder al disco repetidamente. Durante la ejecución de un solo script, si compruebas una ruta, luego la creas o la eliminas y vuelves a comprobarla, es posible que obtengas la respuesta anterior.

Llama a clearstatcache() para forzar una búsqueda actualizada:

<?php

$path = 'temp.txt';

file_put_contents($path, 'hello');      // create the file
clearstatcache();                       // forget the cached result
var_dump(file_exists($path));           // bool(true)

unlink($path);                          // delete the file
clearstatcache();
var_dump(file_exists($path));           // bool(false)

Este almacenamiento en caché es importante en scripts de larga ejecución y bucles que crean o eliminan archivos sobre la marcha.

file_exists() vs. is_file() vs. is_dir()

file_exists() no puede indicar qué tipo de elemento existe, solo que algo existe. Cuando necesitas saberlo con precisión, usa una función más específica:

FunciónDevuelve true cuando la ruta es…
file_exists()un archivo o un directorio (cualquier cosa)
is_file()un archivo normal
is_dir()un directorio
is_readable()existe y el proceso actual puede leerlo
is_writable()existe y el proceso actual puede escribirlo

Un error común es usar file_exists() para confirmar que una ruta es un archivo antes de abrirlo. Si un directorio comparte ese nombre, file_exists() devuelve true pero fopen() fallará. Prefiere is_file() en ese caso.

Casos de uso habituales

Proteger una lectura para que nunca genere una advertencia:

<?php

$config = 'config.php';

if (is_file($config)) {
    require $config;
} else {
    die('Configuration file is missing.');
}

Evitar sobrescribir una carga existente añadiendo un sufijo numérico:

<?php

$target = 'upload.png';
$i = 1;

while (file_exists($target)) {
    $target = "upload-$i.png";
    $i++;
}

echo "Saving to: $target";

Eliminar un archivo solo si existe, para que unlink() no advierta sobre una ruta inexistente:

<?php

$tmp = 'cache.tmp';

if (file_exists($tmp)) {
    unlink($tmp);
}

Aspectos a tener en cuenta

  • Condiciones de carrera. Un archivo puede ser creado o eliminado por otro proceso entre la comprobación con file_exists() y la operación que sigue. Para escrituras críticas, suele ser más seguro intentar la operación y gestionar el error que comprobar primero.
  • Permisos. Si el directorio que lleva al archivo no es accesible para el proceso PHP, file_exists() devuelve false aunque el archivo exista físicamente.
  • URLs remotas. Con la configuración adecuada, file_exists() puede funcionar con algunos envoltorios de flujo, pero no comprueba de forma fiable las URL http://; usa en su lugar una función como file_get_contents() con gestión de errores.

Para profundizar en la lectura y escritura de archivos, consulta el capítulo Manejo de archivos en PHP.

Práctica

Práctica
¿Cuál es la función de 'file_exists()' en PHP?
¿Cuál es la función de 'file_exists()' en PHP?
Was this page helpful?