bagazo
Estoy buscando una pequeña función que me permita eliminar la extensión de un nombre de archivo.
He encontrado muchos ejemplos buscando en Google, pero son malos, porque simplemente eliminan parte de la cadena con “.” . Usan punto para limitador y simplemente cortan la cuerda.
Mira estos guiones,
$from = preg_replace('/\.[^.]+$/','',$from);
o
$from=substr($from, 0, (strlen ($from)) - (strlen (strrchr($filename,'.'))));
Cuando agregamos la cadena como esta:
Este es un ejemplo de una cadena
Devolverá sólo “Esto”…
La extensión puede tener 3 o 4 caracteres, por lo que debemos verificar si el punto está en la posición 4 o 5 y luego eliminarlo.
¿Cómo puede hacerse esto?
Timo Huovinen
http://php.net/manual/en/function.pathinfo.php
pathinfo — Devuelve información sobre la ruta de un archivo
$filename = pathinfo('filename.md.txt', PATHINFO_FILENAME); // returns 'filename.md'
apodo
Prueba este:
$withoutExt = preg_replace('/\.\w+$/', '', $filename);
Entonces, esto coincide con un punto seguido de caracteres de palabras ([a-zA-Z0-9_]
) que no son un punto o un espacio.
-
el problema es que también hay gente que renombra archivos como:
20120720.something.somethingelse.jpg
– Obmerk Kronen
22 de julio de 2012 a las 3:27
-
No creo que esto funcione con archivos con dos caracteres como extensión
– NaturalBornCamper
23 de agosto de 2012 a las 19:18
-
ty! tenga en cuenta que debe usar comillas simples si no realiza la sustitución de variables, por ejemplo
"$var"
– aelgoa
29/10/2013 a las 18:20
-
bueno, para usarlo con archivos .py supongo que tienes que agregar 2,3,4 en lugar de solo 3,4 :> ¡gracias!
– voghDev
13 de junio de 2014 a las 10:49
-
@voghDev para admitir extensiones con 2 a 4 caracteres que debe agregar
{2,4}
en lugar de{3,4}
– Timo Huovinen
19 de junio de 2014 a las 6:37
erik
Del manual, información de ruta:
<?php
$path_parts = pathinfo('/www/htdocs/index.html');
echo $path_parts['dirname'], "\n";
echo $path_parts['basename'], "\n";
echo $path_parts['extension'], "\n";
echo $path_parts['filename'], "\n"; // Since PHP 5.2.0
?>
No tiene que ser una ruta completa para funcionar correctamente. Analizará felizmente file.jpg
como /path/to/my/file.jpg
.
-
Ya comprobé esto. Mismo error que el anterior. Intente acceder a “$path_parts[‘filename’]” from T.sec – “xxx” 23 12 32 3 a twym2 Devolverá solo T. En el ejemplo anterior, ¡no debería eliminar nada!
– marc
7 de marzo de 2010 a las 10:26
Usar nombre base de PHP()
(PHP 4, PHP 5)
var_dump(basename('test.php', '.php'));
Salidas: cadena (4) “prueba”
wprenison
Esta es una solución bastante fácil y funcionará sin importar la extensión o la cantidad de puntos u otros caracteres en la cadena.
$filename = "abc.def.jpg";
$newFileName = substr($filename, 0 , (strrpos($filename, ".")));
//$newFileName will now be abc.def
Básicamente, esto solo busca la última aparición de . y luego usa subcadena para recuperar todos los caracteres hasta ese punto.
Es similar a uno de sus ejemplos buscados en Google pero más simple, más rápido y más fácil que las expresiones regulares y los otros ejemplos. Bueno, de todos modos. Espero que ayude a alguien.
-
Sé que esto llega demasiado tarde, pero creo que esta es la mejor respuesta. Funciona genial.
– Agbogidi Michael
29 de junio de 2017 a las 21:03
-
esto no funcionará para *nix archivos ocultos sin extensión, por ejemplo,
.htaccess
– FrozenFyr
3 de julio de 2019 a las 6:29
Alex
Recomendar uso: pathinfo
con PATHINFO_FILENAME
$filename="abc_123_filename.html";
$without_extension = pathinfo($filename, PATHINFO_FILENAME);
-
Sé que esto llega demasiado tarde, pero creo que esta es la mejor respuesta. Funciona genial.
– Agbogidi Michael
29 de junio de 2017 a las 21:03
-
esto no funcionará para *nix archivos ocultos sin extensión, por ejemplo,
.htaccess
– FrozenFyr
3 de julio de 2019 a las 6:29
Podría usar lo que PHP ha incorporado para ayudar…
$withoutExt = pathinfo($path, PATHINFO_DIRNAME) . "https://stackoverflow.com/" . pathinfo($path, PATHINFO_FILENAME);
Aunque si solo está tratando con un nombre de archivo (.somefile.jpg
), conseguirás…
./algunarchivo
O usa una expresión regular…
$withoutExt = preg_replace('/\.' . preg_quote(pathinfo($path, PATHINFO_EXTENSION), "https://stackoverflow.com/") . '$/', '', $path);
Si no tiene una ruta, sino solo un nombre de archivo, esto funcionará y será mucho más breve …
$withoutExt = pathinfo($path, PATHINFO_FILENAME);
Por supuesto, estos dos solo buscan el último punto (.
).
-
Como se mencionó en la última línea de la solución, fallará para nombres de archivo como
.htaccess
– FrozenFyr
3 de julio de 2019 a las 6:31
¿Qué es una extensión “real”? ¿Desea eliminar los últimos 4 o menos caracteres si están precedidos por un punto?
– clyfe
7 de marzo de 2010 a las 10:18
“Col. Shrapnel”: está diseñado para usuarios de Windows. “clyfe” – sí, quiero eliminar todo después del punto, pero solo si está en la posición 4 o 5, lo que representará “.jpeg” o “.mp3”. Simplemente no quiero eliminarlo. Sé que puedo hacerlo manualmente usando str-pos y cortar la cadena usando la instrucción if (si 5 pos = punto, luego corte (rtrim) de los 5 caracteres correctos, si 4 pos = punto, entonces rtrim 4, de lo contrario regrese sin ninguna modificación. Pero tal vez es una solución más rápida.
– marc
7 de marzo de 2010 a las 10:30
¿Qué pasa con los archivos .package? ¿O .unidad? Parece un poco arbitrario restringir una extensión a 4 caracteres.
– rdb
16 de septiembre de 2016 a las 0:03
Si marc vuelve, espero que cambie la respuesta aceptada.
– HoldOffHunger
7 de enero de 2022 a las 2:24