W3docs

filetype()

La función filetype() de PHP devuelve el tipo de una entrada del sistema de archivos como string.

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

filetype() es una función integrada de PHP que indica qué tipo de entrada del sistema de archivos apunta una ruta: un archivo regular, un directorio, un enlace simbólico, entre otros. Recibe una sola ruta y devuelve el tipo como una string en minúsculas, o false en caso de error.

Esto resulta útil cuando se recorre un directorio y se necesita tratar archivos y subdirectorios de forma diferente, cuando se valida que una subida aterrizó donde se esperaba, o cuando se deben omitir entradas especiales (tuberías, archivos de dispositivo) que no deben leerse como archivos ordinarios.

Esta es la sintaxis:

La sintaxis PHP de filetype()

filetype(string $filename): string|false

Donde $filename es una ruta relativa o absoluta a la entrada que se desea inspeccionar.

Valores de retorno

filetype() devuelve una de estas strings:

String devueltaSignificado
fileUn archivo regular
dirUn directorio
linkUn enlace simbólico
fifoUna tubería con nombre (FIFO)
socketUn socket de dominio Unix
blockUn dispositivo de bloque especial (p. ej., un disco)
charUn dispositivo de carácter especial (p. ej., una terminal)
unknownNo se pudo determinar el tipo

Si la ruta no existe o no se puede leer, filetype() devuelve false y emite un E_WARNING. Como false se compara como igual a la string vacía en una comparación no estricta, compruebe siempre el resultado con === antes de utilizarlo.

¿Cómo usar la función filetype()?

Pase una ruta e inspeccione la string devuelta:

Uso básico

<?php

$path = __FILE__;          // the path of the currently running script
$type = filetype($path);

echo "The entry '$path' is of type: $type";
// e.g. The entry '/var/www/index.php' is of type: file

El uso de __FILE__ garantiza que la ruta exista, por lo que el ejemplo se ejecuta en cualquier entorno sin configuración previa.

Manejo del retorno false

Dado que filetype() devuelve false para una ruta inexistente o ilegible, proteja la llamada antes de usar el resultado. Verificar primero con file_exists() evita la advertencia por completo:

Consulta segura

<?php

$path = '/path/that/does/not/exist';

if (!file_exists($path)) {
    echo "Path not found.";
} else {
    $type = filetype($path);
    echo $type === false
        ? "Could not determine the type."
        : "Type: $type";
}
// Path not found.

Distinguir archivos de directorios al iterar

Una tarea habitual es iterar un directorio y actuar solo sobre archivos o solo sobre subdirectorios. filetype() hace explícita la ramificación:

Clasificar entradas de directorio

<?php

$dir = sys_get_temp_dir();          // a directory that always exists

foreach (scandir($dir) as $entry) {
    if ($entry === '.' || $entry === '..') {
        continue;                   // skip the self/parent references
    }

    $full = $dir . DIRECTORY_SEPARATOR . $entry;
    echo $entry . ' => ' . filetype($full) . PHP_EOL;
}

Aquí scandir() lista el contenido del directorio y filetype() etiqueta cada entrada. Para un recorrido de menor nivel se puede usar readdir() con opendir() en su lugar.

filetype() frente a is_file() e is_dir()

Cuando solo se necesita una respuesta de sí/no para un tipo específico, las funciones predicado dedicadas son más claras y no requieren comparar strings:

  • is_file()true si la ruta es un archivo regular.
  • is_dir()true si la ruta es un directorio.

Use filetype() cuando necesite distinguir entre varios tipos posibles en un mismo lugar (por ejemplo, para omitir FIFOs y sockets), y use is_file() / is_dir() cuando una sola comprobación booleana sea más legible.

Tenga en cuenta la caché de estadísticas

PHP almacena en caché los resultados de las funciones del sistema de archivos durante la duración de una solicitud, por lo que si una ruta se crea, elimina o reemplaza después de la primera comprobación, filetype() puede devolver un valor desactualizado. Llame a clearstatcache() para forzar una nueva consulta. Tenga en cuenta también que filetype() sigue los enlaces simbólicos igual que stat() — para detectar el propio enlace, use lstat().

Conclusión

filetype() devuelve el tipo de una entrada del sistema de archivos como una string (file, dir, link, etc.) y false en caso de error. Compruebe el resultado con ===, verifique la ruta con file_exists() para evitar advertencias, y recuerde usar clearstatcache() cuando vuelva a comprobar una ruta que cambió en mitad de la solicitud. Para comprobaciones simples de un solo tipo, prefiera is_file() e is_dir(); para obtener el conjunto completo de estadísticas de archivo en una sola llamada, consulte stat().

Práctica

Práctica
¿Qué hace la función is_file() en PHP?
¿Qué hace la función is_file() en PHP?
Was this page helpful?