Estou procurando uma pequena função que permita remover a extensão de um nome de arquivo.
Encontrei muitos exemplos pesquisando no Google, mas eles são ruins, porque apenas removem parte da string com "." . Eles usam ponto como limitador e apenas cortam a corda.
Veja esses scripts,
$from = preg_replace('/\.[^.]+$/','',$from);
ou
$from=substr($from, 0, (strlen ($from)) - (strlen (strrchr($filename,'.'))));
Quando adicionamos a string assim:
Este é um exemplo de somestring
Ele retornará apenas "Este" ...
A extensão pode ter 3 ou 4 caracteres, portanto, precisamos verificar se o ponto está na posição 4 ou 5 e removê-lo.
Como pode ser feito?
Respostas:
Tente este:
Portanto, isso corresponde a um ponto seguido por três ou quatro caracteres que não são um ponto ou um espaço. A regra "3 ou 4" provavelmente deve ser relaxada, pois há várias extensões de arquivo mais curtas ou mais longas.
fonte
20120720.something.somethingelse.jpg
"$var"
{2,4}
vez de{3,4}
http://php.net/manual/en/function.pathinfo.php
fonte
No manual, pathinfo :
Não precisa ser um caminho completo para funcionar corretamente. Analisará
file.jpg
tão alegremente quanto/path/to/my/file.jpg
.fonte
Usar nome de base do PHP ()
(PHP 4, PHP 5)
var_dump(basename('test.php', '.php'));
Saídas: string (4) "test"
fonte
Essa é uma solução bastante fácil e funcionará, não importa quanto tempo a extensão ou quantos pontos ou outros caracteres estejam na sequência.
Basicamente, isso apenas procura a última ocorrência de. e, em seguida, usa substring para recuperar todos os caracteres até esse ponto.
É semelhante a um de seus exemplos pesquisados no Google, mas mais simples, mais rápido e mais fácil que as expressões regulares e os outros exemplos. Bem, de qualquer maneira. Espero que ajude alguém.
fonte
.htaccess
Você pode usar o que o PHP incorporou para ajudar ...
Embora se você estiver lidando apenas com um nome de arquivo (
.somefile.jpg
), receberá ...Veja no CodePad.org
Ou use uma regex ...
Veja no CodePad.org
Se você não tiver um caminho, mas apenas um nome de arquivo, isso funcionará e será muito mais tenso ...
Veja no CodePad.org
Obviamente, esses dois apenas procuram o último período (
.
).fonte
.htaccess
O código a seguir funciona bem para mim e é bastante curto. Ele apenas divide o arquivo em uma matriz delimitada por pontos, exclui o último elemento (que é hipoteticamente a extensão) e reforma a matriz com os pontos novamente.
fonte
.htaccess
Na verdade, isso é absolutamente a coisa correta a se fazer. Vá em frente e use isso.
A extensão do arquivo é tudo após o último ponto, e não é necessário que a extensão do arquivo tenha um número específico de caracteres. Mesmo falando apenas sobre o Windows, ele já vem com extensões de arquivo que não cabem de 3 a 4 caracteres, como por exemplo.
.manifest
.fonte
.htaccess
e.htpasswd
em ambientes apache.Recomende o uso:
pathinfo
comPATHINFO_FILENAME
fonte
Existem algumas maneiras de fazer isso, mas acho que uma das maneiras mais rápidas é a seguinte
Outra solução é essa. Ainda não testei, mas parece que deve funcionar por vários períodos em um nome de arquivo
Além disso:
Em tudo isso,
$name
contém o nome do arquivo sem a extensãofonte
Resultado:
fonte
$the_extension = substr($image_name, $last_dot_index, $last_dot_index);
Adicione isso para obter a extensão do arquivo.Como outros mencionam, a idéia de limitar a extensão a um certo número de caracteres é inválida. Seguindo a ideia de array_pop, pensando em uma string delimitada como uma matriz, essa função foi útil para mim ...
Uso:
Saídas:
Em ação:
http://sandbox.onlinephpfunctions.com/code/5d12a96ea548f696bd097e2986b22de7628314a0
fonte
Você pode definir o comprimento do padrão de expressão regular usando o
{x,y}
operador{3,4}
corresponderia se o padrão precedente ocorrer 3 ou 4 vezes.Mas acho que você realmente não precisa disso. O que você fará com um arquivo chamado "This.is"?
fonte
Usa isto:
fonte
Tente usar este. certamente removerá a extensão do arquivo.
fonte
EDIT : A abordagem mais inteligente IMHO, remove o último ponto e o texto a seguir de um nome de arquivo (também conhecido como extensão):
Felicidades ;)
fonte
end()
não deve funcionar com uma função passada como parâmetro. Também produz um aviso: Apenas variáveis devem ser passados por referênciaIsso funciona quando há várias partes em uma extensão e é curto e eficiente:
fonte