Eu tenho 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]);
}
}
Se eu tiver um arquivo nomeado my.zip
, essa função retornará .zip
.
Quero fazer o inverso, quero que a função retorne my
sem a extensão.
O arquivo é apenas uma string em uma variável.
Respostas:
Não há necessidade de tudo isso. Confira pathinfo () , ele fornece todos os componentes do seu caminho.
Exemplo do manual:
Saída do código:
Como alternativa, você pode obter apenas certas partes, como:
fonte
basename
. Sem erros de designação.Como alternativa
pathinfo()
, você pode usarbasename()
- Retorna o componente do caminho do nome do arquivoExemplo do manual do PHP
Você precisa conhecer a extensão para removê-la com antecedência.
No entanto, como sua pergunta sugere que você precisa obter a extensão e o nome da base, eu votaria a resposta de Pekka como a mais útil, porque fornecerá as informações desejadas sobre o caminho e o arquivo com um único arquivo nativo função.
fonte
basename
, mas,pathinfo
como mostrado mais, estava na página.https://php.net/manual/en/function.pathinfo.php
Teste funcional simples: https://ideone.com/POhIDC
fonte
basename
;-)PATHINFO_FILENAME
, nãoPATHINFO_EXTENSION
....filename
não tem uma extensão enquantobasename
faz deve ter algumas tendências sádicas ...Outra abordagem é usar expressões regulares.
Isso remove do último período
.
até o final da string.fonte
$fileName
que pudesse fazer com que o mecanismo funcionasse em tempo exponencial (ou pior). E supondo que tenhamos terminado de dissecar as partes internas desse mecanismo regex específico e provado que ele é robusto contra todos os valores possíveis$fileName
, o código ainda não é arbitrariamente portátil para outra plataforma que possui outra implementação do mecanismo regex.Se a extensão não for conhecida, use esta solução
Função PHP MAN pathinfo
fonte
pathinfo
. Isso ajudará o OP a melhorar oShowFileExtension
método e fornecerá uma leitura extra para quem tentar encontrar essa resposta. Também um pouco de uma descrição não desviar ...@Gordon basename funcionará bem se você souber a extensão, se não souber, poderá usar o explodir:
fonte
pathinfo
, e é por isso que dei apenasbasename
como alternativa. Não há necessidade de reinventarpathinfo
com regex ouexplode
.end(explode(".", $file));
fornece a extensão, não o nome do arquivo.Quase todas as soluções acima têm o nome de arquivo mostrado na variável $ path
O snippet abaixo obterá o nome do arquivo executado atualmente sem extensão
Explicação
fonte
Não há necessidade de escrever muito código. Mesmo isso pode ser feito apenas por uma linha de código. Veja aqui
Abaixo está o código de uma linha que retorna apenas o nome do arquivo e remove o nome da extensão:
Irá imprimir
Fonte: Remova a extensão e retorne apenas o nome do arquivo no PHP
fonte
@fire, caso o nome do arquivo use pontos, você pode obter a saída errada. Eu usaria o método @Gordon, mas também obteria a extensão, portanto a função basename funciona com todas as extensões, desta forma:
fonte
no meu caso, eu uso abaixo. Eu não ligo para qual é sua extensão. : D eu acho que vai te ajudar
fonte
$extenion
Você pode escrever isso
Eles retornarão o elemento atual da matriz, se não for usado antes.
fonte
Curto
fonte
b.php
e eu executeia.php
tendorequire('b.php')
. Em seguida, a saída será como emb
vez dea
Nome de arquivo sem extensão de arquivo quando você não a conhece:
$basename = substr($filename, 0, strrpos($filename, "."));
fonte
Se você não souber qual extensão possui, tente o seguinte:
Trabalhando com todas as possibilidades:
fonte
Sua resposta está abaixo da solução perfeita para ocultar a extensão de arquivo em php.
fonte
As soluções existentes falham quando há várias partes em uma extensão. A função abaixo funciona para várias partes, um caminho completo ou apenas um nome de arquivo:
fonte
Isso retorna apenas o nome do arquivo sem nenhuma extensão em 1 linha:
fonte