W3docs

pathinfo()

La función pathinfo() de PHP divide una ruta de archivo en directorio, nombre y extensión, devolviéndolos como un array asociativo.

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

La función pathinfo() es una función integrada de PHP que divide una ruta de archivo en sus partes — el directorio, el nombre del archivo y la extensión — y las devuelve como un array asociativo. Es el asistente de referencia cuando necesitas responder preguntas como "¿en qué carpeta está este archivo?" o "¿cuál es la extensión de un archivo subido?" sin tener que escribir tu propio análisis de cadenas.

Algo clave que debes entender desde el principio: pathinfo() trabaja únicamente sobre la cadena que le proporcionas. Nunca accede al sistema de archivos, por lo que la ruta no tiene que apuntar a un archivo que realmente exista. Esto la hace rápida y segura para llamar con valores proporcionados por el usuario (por ejemplo, el nombre original de un archivo subido).

Esta página cubre la sintaxis, el array que devuelve pathinfo(), cómo solicitar un único componente y los casos extremos que suelen confundir a la gente (sin extensión, dotfiles, extensiones de múltiples partes).

Sintaxis

pathinfo(string $path, int $flags = PATHINFO_ALL): array|string
  • $path — la ruta de archivo a inspeccionar. Puede ser absoluta o relativa y no es necesario que exista.
  • $flags — opcional. Cuando se omite (o se establece en PATHINFO_ALL), la función devuelve un array asociativo. Cuando se establece en un único indicador, devuelve solo ese componente como una cadena.

El array que devuelve pathinfo()

Por defecto, pathinfo() devuelve un array asociativo con hasta cuatro claves:

ClaveSignificadoEjemplo para /var/www/html/index.php
dirnameLa parte del directorio/var/www/html
basenameEl nombre completo del archivo con extensiónindex.php
extensionLa extensión (sin el punto)php
filenameEl nombre del archivo sin extensiónindex
php— editable, runs on the server

Aquí pasamos la ruta del archivo y almacenamos el array resultante en $info, luego leemos cada componente por su clave.

Importante: la clave extension solo existe cuando la ruta contiene un .. Si la ruta no tiene extensión, esa clave simplemente está ausente del array, por lo que acceder directamente a $info['extension'] generaría una advertencia de "Undefined array key". Protégelo con $info['extension'] ?? '' cuando tengas dudas.

Devolver un único componente

Si solo necesitas una parte, pasa un indicador como segundo argumento. Los indicadores posibles son PATHINFO_DIRNAME, PATHINFO_BASENAME, PATHINFO_EXTENSION y PATHINFO_FILENAME. Con un único indicador la función devuelve una cadena en lugar de un array:

php— editable, runs on the server

Esta es la forma más limpia de obtener solo la extensión — por ejemplo, para verificar que una subida es de un tipo permitido.

Casos extremos a tener en cuenta

pathinfo() es tolerante, pero algunos resultados sorprenden a la gente:

<?php

// 1. No extension: the 'extension' key is missing entirely.
print_r(pathinfo('/etc/hosts'));
// Array ( [dirname] => /etc [basename] => hosts [filename] => hosts )

// 2. Multi-part extension: only the LAST part counts as the extension.
print_r(pathinfo('archive.tar.gz'));
// Array ( [dirname] => . [basename] => archive.tar.gz
//         [extension] => gz [filename] => archive.tar )

// 3. Dotfile: the leading dot makes the whole name the "extension".
print_r(pathinfo('/home/user/.bashrc'));
// Array ( [dirname] => /home/user [basename] => .bashrc
//         [extension] => bashrc [filename] =>  )

Notas:

  • Una ruta sin directorio (caso 2) reporta dirname como . (el directorio actual).
  • Para nombres del estilo .tar.gz, pathinfo() trata solo gz como la extensión — no hay forma integrada de obtener tar.gz en una sola llamada.
  • Un dotfile como .bashrc se lee como "un archivo sin nombre con extensión bashrc", que raramente es lo que se desea. Maneja esos casos tú mismo si tu código los permite.

Cuándo usar pathinfo()

Recurre a pathinfo() cuando necesites más de una parte de una ruta a la vez, o cuando quieras un array con nombres legibles en lugar de recordar qué función dedicada hace qué:

  • Usa pathinfo($p) para obtener el directorio, el nombre y la extensión juntos.
  • Usa basename() si solo quieres el nombre del archivo — también permite eliminar un sufijo conocido.
  • Usa dirname() si solo quieres el directorio, y maneja múltiples niveles mediante su argumento $levels.
  • Usa realpath() cuando necesites resolver una ruta contra el sistema de archivos real (enlaces simbólicos, .., etc.) — a diferencia de pathinfo(), sí accede al disco y devuelve false para archivos inexistentes.

Para una visión más amplia sobre la lectura y escritura de archivos, consulta Manejo de Archivos en PHP.

Conclusión

pathinfo() es la forma más rápida de dividir una ruta de archivo en su directorio, nombre base, extensión y nombre de archivo sin extensión. Recuerda que solo analiza la cadena (nunca comprueba si el archivo existe), que la clave extension está ausente cuando no hay extensión, y que solo se reporta la extensión final para nombres como archive.tar.gz. Para necesidades de un único componente, las funciones dedicadas basename() y dirname() suelen ser más claras.

Práctica

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