Tengo este código PHP:
function ShowFileExtension($filepath)
{
preg_match('/[^?]*/', $filepath, $matches);
$string = $matches[0];
$pattern = preg_split('/\./', $string, -1, PREG_SPLIT_OFFSET_CAPTURE);
if(count($pattern) > 1)
{
$filenamepart = $pattern[count($pattern)-1][0];
preg_match('/[^?]*/', $filenamepart, $matches);
return strtolower($matches[0]);
}
}
Si tengo un archivo llamado my.zip
, esta función vuelve .zip
.
Quiero hacer lo contrario, quiero que la función regrese my
sin la extensión.
El archivo es solo una cadena en una variable.
Respuestas:
No hay necesidad de todo eso. Echa un vistazo a pathinfo () , te da todos los componentes de tu ruta.
Ejemplo del manual:
Salida del código:
Y, alternativamente, solo puede obtener ciertas partes como:
fuente
basename
. Sin engaños.Como alternativa a
pathinfo()
, puede usarbasename()
- Devuelve el componente del nombre de archivo de la rutaEjemplo del manual de PHP
Sin embargo, debe conocer la extensión para eliminarla de antemano.
Sin embargo, dado que su pregunta sugiere que tiene la necesidad de obtener la extensión y el nombre base, votaría la respuesta de Pekka como la más útil, porque le dará cualquier información que desee sobre la ruta y el archivo con un único nativo función.
fuente
basename
, peropathinfo
como se muestra en la página.https://php.net/manual/en/function.pathinfo.php
Prueba funcional simple: https://ideone.com/POhIDC
fuente
basename
;-)PATHINFO_FILENAME
, noPATHINFO_EXTENSION
...filename
no tiene una extensión mientras sebasename
hace debe tener algunas tendencias sádicas ...Otro enfoque es mediante el uso de expresiones regulares.
Esto elimina desde el último período
.
hasta el final de la cadena.fuente
$fileName
que podría hacer que el motor funcione en un tiempo exponencial (o peor). Y suponiendo que hayamos terminado de diseccionar las partes internas de este motor regex específico y teóricamente hayamos demostrado que es robusto contra todos los valores posibles$fileName
, el código aún no es arbitrariamente portátil a otra plataforma que tenga otra implementación del motor regex.Si no se conoce la extensión, use esta solución
PHP MAN función pathinfo
fuente
pathinfo
. Esto ayudará a OP a mejorar elShowFileExtension
método y proporcionará una lectura adicional para cualquiera que intente encontrar esta respuesta. También una pequeña descripción no se perdería ...@Gordon basename funcionará bien si conoce la extensión, si no puede usar explotar:
fuente
pathinfo
, por eso di solobasename
como alternativa. No hay necesidad de reinventarpathinfo
con regex oexplode
.end(explode(".", $file));
le da la extensión, no el nombre del archivo.Casi todas las soluciones anteriores tienen el nombre de archivo que se muestra de la variable $ path
El siguiente fragmento obtendrá el nombre del archivo ejecutado actual sin extensión
Explicación
fuente
No hay necesidad de escribir mucho código. Incluso se puede hacer con una sola línea de código. Ver aquí
A continuación se muestra el código de una línea que solo devuelve el nombre del archivo y elimina el nombre de la extensión:
Imprimirá
Fuente: eliminar la extensión y devolver solo el nombre del archivo en PHP
fuente
@fire en caso de que el nombre de archivo use puntos, podría obtener un resultado incorrecto. Usaría el método @Gordon pero también obtendría la extensión, por lo que la función basename funciona con todas las extensiones, como esta:
fuente
en mi caso, lo uso a continuación. No me importa cuál es su extensión. : D creo que te ayudará
fuente
$extenion
Puedes escribir esto
Estos devolverán el elemento actual de la matriz, si no se usó antes.
fuente
Corto
fuente
b.php
y ejecutéa.php
tenerrequire('b.php')
. Luego, la salida será cómo enb
lugar dea
Nombre de archivo sin extensión de archivo cuando no conoce esa extensión:
$basename = substr($filename, 0, strrpos($filename, "."));
fuente
Si no sabe qué extensión tiene, puede probar esto:
Trabajando con todas las posibilidades:
fuente
Su respuesta está debajo de la solución perfecta para ocultar la extensión de archivo en php.
fuente
Las soluciones existentes fallan cuando hay varias partes en una extensión. La siguiente función funciona para varias partes, una ruta completa o simplemente un nombre de archivo:
fuente
Este solo devuelve el nombre de archivo sin ninguna extensión en 1 fila:
fuente