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?

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top