Extensión de archivo en PHP: 5 formas en 2025 (pregunta de Stack Overflow)

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Cómo obtener la extensión de un archivo en PHP: mejores prácticas para 2025

\n\n

¿Alguna vez te has encontrado en la situación de necesitar determinar rápidamente qué tipo de archivo está subiendo un usuario — una imagen, un documento o un archivo comprimido? ¿O quizás estás escribiendo un analizador de archivos y necesitas procesar dinámicamente cientos de extensiones? La pregunta "How can I get a file's extension in PHP?" ha estado entre las más populares en Stack Overflow durante años, acumulando cientos de miles de visitas. Y no es casualidad.

\n\n

Podría parecer sencillo: tomas la cadena, encuentras el punto, cortas la cola. Pero PHP es un lenguaje con carácter. Ofrece varias funciones integradas, y elegir la correcta depende del contexto. En 2025, cuando la seguridad y el rendimiento son más importantes que nunca, analizaremos todas las formas relevantes e identificaremos la mejor.

\n\n

En este artículo aprenderás:

\n
    \n
  • Cinco formas funcionales de obtener la extensión de un archivo en PHP.
  • \n
  • Qué método deberías usar en el 95% de los casos.
  • \n
  • Cómo no caer en la trampa con archivos sin extensión o con múltiples puntos.
  • \n
  • Ejemplos de código reales para copiar.
  • \n
\n\n

Método 1: El clásico — pathinfo()

\n\n

Si le preguntas a cualquier desarrollador PHP con experiencia cómo obtener la extensión de un archivo, te responderá sin dudarlo: pathinfo(). Esta es la forma más popular y recomendada. La función devuelve un array con información de la ruta: directorio, nombre del archivo, extensión y nombre completo.

\n\n
<?php\n$file = 'document.pdf';\n$extension = pathinfo($file, PATHINFO_EXTENSION);\necho $extension; // Muestra: pdf\n?>\n
\n\n

La belleza de este método radica en su simplicidad y legibilidad. Pasas el nombre del archivo y la constante PATHINFO_EXTENSION — y obtienes un resultado limpio sin caracteres adicionales. pathinfo() maneja correctamente la mayoría de los casos estándar, incluyendo archivos con múltiples puntos, como archive.tar.gz — en este caso devolverá gz, lo cual es lógico ya que es la extensión final.

\n\n

Ventajas: intuitivo, función integrada, funciona con rutas de cualquier complejidad.

\n

Desventajas: puede devolver una cadena vacía si el archivo no tiene extensión.

\n\n

Método 2: Trabajando con cadenas — strrchr() + substr()

\n\n

A veces, en código heredado o en ejemplos educativos, puedes encontrar análisis manual. La idea es simple: encontrar el último punto en la cadena y tomar todo lo que está después.

\n\n
<?php\n$file = 'image.jpg';\n$extension = substr(strrchr($file, '.'), 1);\necho $extension; // Muestra: jpg\n?>\n
\n\n

La función strrchr() encuentra la última aparición del carácter y devuelve todo desde ahí (incluyendo el punto). substr() con el parámetro 1 elimina el punto. Funciona de manera confiable, pero el código resulta menos legible.

\n\n

Dato curioso: este método es un heredero directo de la era de las funciones similares a C. Es más rápido que pathinfo() en micro-benchmarks, pero en proyectos reales la diferencia es imperceptible. Úsalo si estás escribiendo un analizador de alto rendimiento y cada microsegundo cuenta.

\n\n

Método 3: Rápido y sucio — explode()

\n\n

La forma más ingenua que se le ocurre a un principiante: dividir la cadena por el punto y tomar el último elemento del array.

\n\n
<?php\n$file = 'report.xlsx';\n$parts = explode('.', $file);\n$extension = end($parts);\necho $extension; // Muestra: xlsx\n?>\n
\n\n

Atención: esto es una mala práctica. ¿Por qué? Imagina el archivo my.file.name.txt. explode() lo dividirá en 4 partes, y end() devolverá txt. Parece correcto. Pero ¿qué pasa si el archivo se llama .htaccess? El array será ['', 'htaccess'], y la extensión devuelta será htaccess, aunque ese es el nombre completo del archivo. O un archivo sin extensión — devolverá el propio nombre.

\n\n

Este método debe

Blogs

Book Recommendations