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 limitar 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 de esta manera:
Este es un ejemplo de somestring
Solo devolverá "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?
Respuestas:
Prueba este:
Entonces, esto coincide con un punto seguido de tres o cuatro caracteres que no son un punto o un espacio. La regla "3 o 4" probablemente debería ser relajada, ya que hay muchas extensiones de archivo que son más cortas o más largas.
fuente
20120720.something.somethingelse.jpg
"$var"
{2,4}
lugar de{3,4}
http://php.net/manual/en/function.pathinfo.php
fuente
Del manual, pathinfo :
No tiene que ser una ruta completa para funcionar correctamente. Se analizará tan felizmente
file.jpg
como/path/to/my/file.jpg
.fuente
Utilice PHP basename ()
(PHP 4, PHP 5)
var_dump(basename('test.php', '.php'));
Salidas: cadena (4) "prueba"
fuente
Esta es una solución bastante fácil y funcionará sin importar cuánto tiempo la extensión o cuántos puntos u otros caracteres hay en la cadena.
Básicamente, esto solo busca la última aparición de. y luego usa la subcadena para recuperar todos los caracteres hasta ese punto.
Es similar a uno de sus ejemplos 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.
fuente
.htaccess
Podría usar lo que PHP ha incorporado para ayudar ...
Aunque si solo está tratando con un nombre de archivo (
.somefile.jpg
), obtendrá ...Véalo en CodePad.org
O usa una expresión regular ...
Véalo en CodePad.org
Si no tiene una ruta, sino solo un nombre de archivo, esto funcionará y será mucho más terser ...
Véalo en CodePad.org
Por supuesto, estos dos solo buscan el último período (
.
).fuente
.htaccess
El siguiente código funciona bien para mí, y es bastante corto. Simplemente divide el archivo en una matriz delimitada por puntos, elimina el último elemento (que hipotéticamente es la extensión) y vuelve a reformar la matriz con los puntos.
fuente
.htaccess
En realidad eso es absolutamente lo correcto. Adelante, usa eso.
La extensión del archivo lo es todo después del último punto, y no hay ningún requisito para que una extensión de archivo tenga un número particular de caracteres. Incluso hablando solo de Windows, ya viene con extensiones de archivo que no se ajustan a 3-4 caracteres, como por ejemplo.
.manifest
.fuente
.htaccess
y.htpasswd
en entornos apache.Uso recomendado:
pathinfo
conPATHINFO_FILENAME
fuente
Hay algunas formas de hacerlo, pero creo que una de las formas más rápidas es la siguiente
Otra solución es esta. No lo he probado, pero parece que debería funcionar durante varios períodos en un nombre de archivo
También:
En todos estos,
$name
contiene el nombre de archivo sin la extensiónfuente
Salida:
fuente
$the_extension = substr($image_name, $last_dot_index, $last_dot_index);
Agregue eso para obtener la extensión del archivo.Como otros mencionan, la idea de limitar la extensión a un cierto número de caracteres no es válida. Siguiendo la idea de array_pop, pensando en una cadena delimitada como una matriz, esta función me ha sido útil ...
Uso:
Salidas:
En acción:
http://sandbox.onlinephpfunctions.com/code/5d12a96ea548f696bd097e2986b22de7628314a0
fuente
Puede establecer la longitud del patrón de expresión regular utilizando el
{x,y}
operador.{3,4}
coincidiría si el patrón anterior ocurre 3 o 4 veces.Pero no creo que realmente lo necesites. ¿Qué harás con un archivo llamado "This.is"?
fuente
Utilizar este:
fuente
Intenta usar este. seguramente eliminará la extensión del archivo.
fuente
EDITAR : El enfoque más inteligente en mi humilde opinión, elimina el último punto y el siguiente texto de un nombre de archivo (también conocido como la extensión):
Salud ;)
fuente
end()
no se supone que funcione con una función pasada como parámetro. También produce un aviso: solo las variables deben pasarse por referenciaEsto funciona cuando hay múltiples partes en una extensión y es breve y eficiente:
fuente