Esta es una pregunta que puede leer en todas partes en la web con varias respuestas:
$ext = end(explode('.', $filename));
$ext = substr(strrchr($filename, '.'), 1);
$ext = substr($filename, strrpos($filename, '.') + 1);
$ext = preg_replace('/^.*\.([^.]+)$/D', '$1', $filename);
$exts = split("[/\\.]", $filename);
$n = count($exts)-1;
$ext = $exts[$n];
etc.
Sin embargo, siempre existe "la mejor manera" y debe estar en Stack Overflow.
php
file-extension
e-satis
fuente
fuente
strrchr($filename, '.');
Respuestas:
Las personas de otros lenguajes de secuencias de comandos siempre piensan que la suya es mejor porque tienen una función incorporada para hacer eso y no PHP (estoy viendo Pythonistas en este momento :-)).
De hecho, existe, pero pocas personas lo saben. Cumplir
pathinfo()
:Esto es rápido e incorporado.
pathinfo()
puede darle otra información, como la ruta canónica, dependiendo de la constante que le pase.Recuerde que si desea poder tratar con caracteres no ASCII, primero debe establecer la configuración regional. P.EJ:
Además, tenga en cuenta que esto no tiene en cuenta el contenido del archivo o el tipo mime, solo obtiene la extensión. Pero es lo que pediste.
Por último, tenga en cuenta que esto solo funciona para una ruta de archivo, no para una ruta de recursos URL, que se cubre con PARSE_URL.
Disfrutar
fuente
function get_ext($fname){ return substr($fname, strrpos($fname, ".") + 1); }
asegúrese de que el archivo tenga una extensión, ¡puede hacer cualquier cosa cuando pase una ruta como argumento!pathinfo()
fuente
echo pathinfo('/foo/bar/baz.bill')['extension'];
URL de ejemplo:
http://example.com/myfolder/sympony.mp3?a=1&b=2#XYZ
A) No use sugerencias inseguras
PATHINFO
:B) Use PARSE_URL :
BONIFICACIÓN: Vea todos los ejemplos nativos de PHP
fuente
foo_folder/foo-file.jpg?1345838509
fallará miserablemente con justpathinfo
,parse_url
es para URL ypathinfo
es para ruta de archivo.También hay
SplFileInfo
:A menudo puede escribir un código mejor si pasa un objeto de este tipo en lugar de una cadena. Tu código habla más entonces. Desde PHP 5.4 esta es una línea:
fuente
->getExtension()
está disponible en SplFileInfo desde PHP 5.3.6.La respuesta de E-satis es la forma correcta de determinar la extensión del archivo.
Alternativamente, en lugar de depender de una extensión de archivo, puede usar fileinfo para determinar el tipo MIME de archivos.
Aquí hay un ejemplo simplificado de procesamiento de una imagen cargada por un usuario:
fuente
Siempre que no contenga una ruta, también puede usar:
Donde
$fname
es un nombre del archivo, por ejemplo:my_picture.jpg
. Y el resultado sería:jpg
fuente
1) Si está usando (PHP 5> = 5.3.6) puede usar SplFileInfo :: getExtension - Obtiene la extensión del archivo
Código de ejemplo
Esto dará salida
2) Otra forma de obtener la extensión si está utilizando (PHP 4> = 4.0.3, PHP 5) es pathinfo
Código de ejemplo
Esto dará salida
// EDITAR: eliminado un corchete
fuente
A veces es útil no usar
pathinfo($path, PATHINFO_EXTENSION)
. Por ejemplo:También tenga en cuenta que
pathinfo
no puede manejar algunos caracteres no ASCII (por lo general, solo los suprime de la salida). En extensiones que generalmente no son un problema, pero no está de más estar al tanto de esa advertencia.fuente
test.19-02-2014.jpeg
ltrim(strrchr($PATH, '.'),'.')
funciona como pathinfo, pero sin tokenizar todo.La forma más sencilla de obtener la extensión de archivo en PHP es usar la función incorporada pathinfo de PHP .
fuente
También puedes probar esto (funciona en PHP 5. * y 7):
Consejo: devuelve una cadena vacía si el archivo no tiene una extensión
fuente
Lo siento ... "Pregunta corta; pero NO respuesta corta"
Ejemplo 1 para RUTA
Ejemplo 2 para URL
Salida del ejemplo 1:
Salida del ejemplo 2:
Referencias
https://www.php.net/manual/en/function.pathinfo.php
https://www.php.net/manual/en/function.realpath.php
https://www.php.net/manual/en/function.parse-url.php
fuente
Una solución rápida sería algo como esto.
fuente
$file_ext = end(explode('.', $filename));
hacer todo en esta respuesta en una sola línea en lugar de cuatro..tar.gz
? No funcionará, por lo tanto, si necesita llenarse de extensiones, use lasltrim(strstr($filename, '.'), '.');
extensiones de manera incorrectagz
.Aquí hay un ejemplo. Supongamos que $ filename es "example.txt",
Entonces $ ext será ".txt".
fuente
pathinfo es una matriz. Podemos verificar el nombre del directorio, el nombre del archivo, la extensión , etc.
fuente
fuente
Puedes probar también esto:
fuente
fuente
Esto funcionará
fuente
Descubrí que las soluciones
pathinfo()
ySplFileInfo
funcionan bien para archivos estándar en el sistema de archivos local, pero puede tener dificultades si está trabajando con archivos remotos ya que las URL para imágenes válidas pueden tener un#
(identificadores de fragmentos) y / o?
(parámetros de consulta) al final de la URL, que ambas soluciones tratarán (incorrectamente) como parte de la extensión del archivo.Descubrí que esta era una forma confiable de usar
pathinfo()
una URL después de analizarla primero para eliminar el desorden innecesario después de la extensión del archivo:fuente
Uso
substr($path, strrpos($path,'.')+1);
. Es el método más rápido de todas las comparaciones.@Kurt Zhong ya respondió.
Veamos el resultado comparativo aquí: https://eval.in/661574
fuente
Puede obtener todas las extensiones de archivo en una carpeta particular y realizar operaciones con una extensión de archivo específica:
fuente
Házlo más rápido.
Las llamadas de bajo nivel deben ser muy rápidas, así que pensé que valía la pena investigar un poco. Probé algunos métodos (con varias longitudes de cadena, longitudes de extensión, múltiples ejecuciones cada uno), aquí hay algunos razonables:
Los resultados no fueron muy sorprendentes. Pobre
pathinfo
es (¡con diferencia!) El más lento (parece que está tratando de analizar todo y luego soltar todas las partes innecesarias), ymethod3()
(strrpos) es el más rápido, con diferencia:NOTA: el primer método tiene un efecto secundario: devuelve el nombre completo cuando no hay extensión. Seguramente no tendría sentido medirlo con un strpos adicional para evitar este comportamiento.
Conclusión
Esto se parece al Camino del Samurai:
fuente
Si está buscando velocidad (como en un enrutador), probablemente no quiera tokenizar todo. Muchas otras respuestas fallarán con
/root/my.folder/my.css
fuente
Aunque la "mejor manera" es discutible, creo que esta es la mejor manera por algunas razones:
tar.gz
fuente
En mi opinión, esta es la mejor manera si tiene nombres de archivo como name.name.name.ext (feo, pero a veces sucede):
fuente
$ext = preg_replace('/^.*\.([^.]+)$/D', '$1', $fileName);
Enfoque preg_replace usamos búsqueda y reemplazo de expresiones regulares. En la función preg_replace, el primer parámetro es el patrón de la búsqueda, el segundo parámetro $ 1 es una referencia a lo que coincida con el primer (. *) Y el tercer parámetro es el nombre del archivo.
Otra forma, también podemos usar strrpos para encontrar la posición de la última aparición de un '.' en un nombre de archivo e incremente esa posición en 1 para que explote la cadena desde (.)
$ext = substr($fileName, strrpos($fileName, '.') + 1);
fuente
En realidad, estaba buscando eso.
fuente
Utilizar
para una recuperación rápida de extensión (si sabe con certeza que su nombre de archivo tiene uno).
fuente