• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Battousai

[PHP]Pequena função que retorna extensão de um ficheiro

31 mensagens neste tópico

Função simples que retorna a extensão de um ficheiro.


function getext( $filename ){

$ext = explode( '.', $filename );
$count = count( $ext ) - 1;

return $count ? $ext[ $count ] : '';
}

Obter os Magic Numbers ( Número único de tipo de ficheiro ), proposto por djthyrax

function getMagicNumbers( $filename ){

$f = fopen( $filename, 'r');

$magic = bin2hex( fread( $f, 4 ) );

fclose($f);

return $magic;

}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Dentro do ficheiro GZ, tens o TAR.

Tens que fazer handle quando for "gz" (descompactar, etc)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

e agora se for tar.gz? XD

function getext($filename){ 
return substr($filename, strpos($filename, '.')); 
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

3000 essa função tem a vulnerabilidade de o ficheiro ser ficheiro.do.joaquim.jpg.gif.png  e retorna-te .do.joaquim.jpg.gif.png

O ficheiro .tar.gz tem a extensão absoluta de "gz", se quiseres ver se também tem compressão tar além da gz, basta tentar descompactar o ficheiro, visto que o .tar.gz não é mais do que um ficheiro "tar" dentro de um "gz"

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Só como sugestão, adiciona um caso em que o ficheiro não tem extensão (sistemas *nix, muito comum por exemplo)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Lol então se não tem extensão, queres que faça o quê? Não percebi :cheesy:

EDIT: já percebi. Vou actualizar ;)

Agora retorna vazio se não tiver extensão.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Lol então se não tem extensão, queres que faça o quê? Não percebi :cheesy:

EDIT: já percebi. Vou actualizar ;)

Era só no caso de teres por exemplo, uma array de ficheiros, sei lá, de uma directoria, e estares a tratar com um ciclo while :)

Já agora, lembrei-me: que aconteceria no caso de teres os ficheiros '.' e '..' ? Pá, espero não estares a considerar isto como deitar abaixo, são sugestões... Implementas se te apetecer ou não  :)

É só aquela questão de pensar em todos os casos... Para uma pessoa não chegar aqui, fazer copy e depois aquilo não devolve o que ele quer, porque não soube que não era apopriado à situação... :D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pá isto é só para retornar a extensão. Esses casos devem ser testados anterior ou posteriormente. Isso já não era um getExt, já seria um evalFile xD

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Nota que um .htaccess não tem extensão htaccess: o ponto apenas define o ficheiro com o nome htaccess como oculto. ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pois, mas isso são casos especiais que têm que ser controlados singularmente e que vai depender das necessidades de cada utilizador. No caso em que disses-te, a função devolveria vazio, logo saberias que era um caso especial, ou supostamente do linux.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Fixed your code.


function getext( $filename ){

$ext = explode( '.', $filename );
$count = count( $ext ) - 1;

return $count > ($ext[0] == '' ? 1 : 0) ? $ext[ $count ] : '';
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Desculpa, não tinha percebido o que escreves-te. A tua função serve, se não considerares o htaccess como extensão do ficheiro, o que eu acho que até nem dá jeito, visto desta maneira não poderes confirmar, nem fazer distinção se o ficheiro chega a ter um '.' ou não, ou se tem extensão ou não.

isto seria impossível com a tua "approach"


$acceptedExtensions = array( 'doc', 'bla', 'htaccess' );

if ( in_array( strtolower( getext( $file ) ), $acceptedExtensions ) ){

blabla

}

Aqui já não filtrarias se o ficheiro fosse .htaccess, mas acho que a partir de certo ponto depende do que o programador queira fazer.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não seria possível porque está incorrecto. :D Um ficheiro NUNCA pode não ter nome, daí ser utilizado o . como identificador de hidden. ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ok, quando digo extensão é literalmente o que vem seguidamente do último '.' do ficheiro, sendo o nome tudo o que identifica o ficheiro, '.' inclusivé.

Agora que na tua hipotetica aplicação, irias ter que adicionar mais condicionantes para identificar o ficheiro htaccess, terias. Mas há o oposto. Se quisesses ignorar todos os ficheiros sem texto à esquerda, já essa daria mais jeito.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não ter texto à esquerda significa que é hidden, o propósito desta função é apenas devolver a extensão do ficheiro, nada mais. Ou seja, essa aplicação que referenciaste para a função era fazer o que nunca se deve fazer e que muitas vezes dá dores de cabeça terríveis: usar funções para fazer aquilo que não é suposto fazerem.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não ter texto à esquerda significa que é hidden, o propósito desta função é apenas devolver a extensão do ficheiro, nada mais. Ou seja, essa aplicação que referenciaste para a função era fazer o que nunca se deve fazer e que muitas vezes dá dores de cabeça terríveis: usar funções para fazer aquilo que não é suposto fazerem.

Isso é a tua opinião eu discordo. Usa a que quiseres.
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Isso é a tua opinião eu discordo. Usa a que quiseres.

Claro, cada um usa o que quer, mas simplesmente há que usar as coisas para aquilo que elas foram feitas, nada mais.
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu acho que a função está a fazer o seu trabalho, que é ir buscar a extensão do nome do ficheiro ( leia-se, texto depois do último ponto ).

Se tens uma visão diferente, seja.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu acho que a função está a fazer o seu trabalho, que é ir buscar a extensão do nome do ficheiro ( leia-se, texto depois do último ponto ).

Só que o problema é que a função não faz o trabalho que é descrito em todos os casos. Para o .htaccess não deveria retornar htaccess como extensão.

Tudo bem que estou a ser picuinhas e que pode não ser últil algo deste género, mas só estou a seguir o que é correcto. ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Correcto nos teus moldes, amigo.

Até podia ser .abcd e abcd continuaria a ser a extensão, a meu ver, e correcto para mim.

Mas isto já são filosofias.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mas isto já são filosofias.

Sim, pode-se dizer que sim. ;)
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

E agora para dificultar a coisa, cagar nas extenções e ver o tipo pelo mime type, hum :(

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mime-Type relies on extensions. :(

O que tu podias dizer era ver pelos magic numbers :(

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora