Melhor maneira de reconhecer um filetype em php [fechado]
Pergunta
Qual é a melhor maneira de descobrir filetype de um arquivo dentro de php? Ouvi dizer que o browser pode ser enganado, então qual é a melhor maneira de fazer isso?
Solução
Você pode usar finfo_file
<?php
echo finfo_file(finfo_open(FILEINFO_MIME), "foo.png");
?>
Outras dicas
Olhe para "números mágicos". Os primeiros bytes de arquivos geralmente identificar que tipo de arquivo é. Por exemplo, os firts poucos bytes de um ficheiro GIF ou são 47 49 46 38 37 61 ou 47 49 46 38 39 61, ASCII para GIF89a ou GIF87a. Há muitos outros "números mágicos". Consulte http://en.wikipedia.org/wiki/Magic_number_ (programação) #Magic_numbers_in_files
EDIT:. Creio que esta é mais confiável do que funções MIME no PHP
eu acho que você quer dizer finfo_file () para descobrir mimetype
de php.net Exemplo:
<?php
$finfo = finfo_open(FILEINFO_MIME); // return mime type ala mimetype extension
foreach (glob("*") as $filename) {
echo finfo_file($finfo, $filename) . "\n";
}
finfo_close($finfo);
?>
Você não pode confiar em Content-Type retornado pelo browser. É baseado na extensão do arquivo e pode ser facilmente enganado.
As stalepretzel mencionou, melhor maneira de adivinhar arquivo do tipo de conteúdo está usando números mágicos. Se o servidor estiver rodando em uma máquina * nix, você pode usar esta função:
<?php
function get_file_type($file) {
if(function_exists('shell_exec') === TRUE) {
$dump = shell_exec(sprintf('file -bi %s', $file));
$info = explode(';', $dump);
return $info[0];
}
return FALSE;
}
?>
Usage: $file_type = get_file_type('my_file_name.ext');
PD:. Cheque /usr/share/magic.mime para mais informações