valores - La mejor forma de reconocer un tipo de archivo en php
leer y mostrar archivo de texto en php (4)
Creo que te refieres a finfo_file () para descubrir el tipo mimetype
de php.net Ejemplo:
<?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);
?>
¿Cuál es la mejor manera de descubrir el tipo de archivo de un archivo dentro de php? Escuché que el navegador puede ser engañado, ¿cuál es la mejor forma de hacerlo?
Mira "números mágicos". Los primeros pocos bytes de archivos generalmente identifican qué tipo de archivo es. Por ejemplo, los primeros pocos bytes de un GIF son 47 49 46 38 37 61 o 47 49 46 38 39 61, ASCII para GIF89a o GIF87a. Hay muchos otros "números mágicos". Ver http://en.wikipedia.org/wiki/Magic_number_(programming)#Magic_numbers_in_files
EDITAR: Creo que esto es más confiable que las funciones MIME en PHP.
No puede confiar en Content-Type devuelto por el navegador. Se basa en la extensión de archivo y se puede engañar fácilmente.
Como stalepretzel lo mencionó, la mejor manera de adivinar el tipo de contenido del archivo es usar números mágicos. Si su servidor se ejecuta en una máquina * nix, puede usar esta función:
<?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: compruebe /usr/share/magic.mime para obtener más información.
Puedes usar finfo_file
<?php
echo finfo_file(finfo_open(FILEINFO_MIME), "foo.png");
?>