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

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: de principiante a experto en 2025

\n\n

¿Alguna vez te has preguntado cuántas veces al día un desarrollador PHP necesita extraer la extensión de un archivo? Decenas, si no cientos. Subida de avatares, procesamiento de documentos, validación de imágenes... en todas partes necesitas saber qué tipo de archivo tienes entre manos: .jpg, .pdf o el astuto .php.jpg.

\n\n

La pregunta "How can I get a file's extension in PHP?" es una de las más populares en Stack Overflow. Y con razón. Parece algo sencillo, pero el diablo está en los detalles. En 2025 no solo contamos con los clásicos pathinfo() y explode(), sino también con las nuevas capacidades de PHP 8.4 que hacen el código más limpio y seguro.

\n\n

Vamos a analizar 5 métodos funcionales, sus ventajas, desventajas y cuándo usar cada uno. ¡Allá vamos!

\n\n

1. El clásico indiscutible: pathinfo() — el rey de todos los métodos

\n\n

La forma más popular y correcta es la función pathinfo(). Apareció en PHP 4 y sigue siendo igual de relevante. ¿Por qué? Porque es inteligente: tiene en cuenta los separadores de ruta del sistema, funciona con URL y no se rompe con puntos en el nombre del archivo.

\n\n
<?php\n$file = 'documento.reporte.pdf';\n$extension = pathinfo($file, PATHINFO_EXTENSION);\n// Resultado: 'pdf'\n?>
\n\n

Pero hay un detalle. Si el archivo no tiene extensión, pathinfo() devuelve una cadena vacía. No null, ni false, sino una cadena vacía. Esto es importante para validaciones estrictas.

\n\n
<?php\n$file = 'README';\n$ext = pathinfo($file, PATHINFO_EXTENSION);\nvar_dump($ext); // string(0) ""\n?>
\n\n

Cuándo usarlo: siempre que necesites obtener la extensión de forma rápida y fiable. Es el estándar de la industria.

\n\n

2. El método de la vieja escuela: explode() y strrpos()

\n\n

Algunos desarrolladores más veteranos prefieren el análisis manual de cadenas. La idea es simple: encontrar el último punto y tomar todo lo que está después.

\n\n
<?php\n$file = 'imagen.jpg';\n$parts = explode('.', $file);\n$extension = end($parts);\n// Resultado: 'jpg'\n?>
\n\n

Parece que funciona. Pero hay una trampa: explode() crea un array, y end() mueve el puntero interno del array. No es crítico, pero no es elegante.

\n\n

Una variante más eficiente es strrpos() + substr():

\n\n
<?php\n$file = 'archivo.tar.gz';\n$pos = strrpos($file, '.');\n$extension = $pos !== false ? substr($file, $pos + 1) : '';\n// Resultado: 'gz'\n?>
\n\n

Observa que strrpos() busca la última aparición del punto. Esto es correcto: queremos gz, no tar.gz.

\n\n

Cuándo usarlo: cuando pathinfo() no esté disponible (algo exótico) o necesites más control sobre la lógica.

\n\n

3. Novedad 2025: str_contains() y str_starts_with()

\n\n

En PHP 8.0 aparecieron str_contains() y str_starts_with(), y en PHP 8.4 se mejoró el manejo de cadenas multibyte. Esto abre nuevas formas elegantes de trabajar.

\n\n
<?php\n$file = 'foto.2025.jpg';\n\nif (str_contains($file, '.')) {\n    $extension = substr($file, strrpos($file, '.') + 1);\n} else {\n    $extension = '';\n}\n// Resultado: 'jpg'\n?>
\n\n

¿Bonito? No mucho. Pero si necesitas verificar si un archivo es una imagen, str_ends_with() es tu aliado:

\n\n
<?php\n$file = 'avatar.png';\n$isImage = str_ends_with($file, '.png') || str_ends_with($file, '.jpg');\n// true\n?>
\n\n

Cuándo usarlo: para comprobaciones rápidas de extensiones específicas sin extraer la extensión completa.

\n\n

4. Expresiones regulares: cuando lo quieres todo y ya

\n\n

A veces una sola extensión no es suficiente. Por ejemplo, necesitas verificar que el archivo sea una imagen segura y, de paso, extraer el nombre sin extensión. Aquí es donde entran las expresiones regulares.

Blogs

Book Recommendations