Acabo de implementar esto para un proyecto en el que estoy trabajando. libmagic es lo que estás buscando. En RHEL/CentOS es provisto por file-libs y file-devel. Debian/Ubuntu parece ser libmagic-dev.
http://darwinsys.com/file/
Aquí hay un código de ejemplo:
#include <stdio.h>
#include <magic.h>
int main(int argc, char **argv){
const char *mime;
magic_t magic;
printf("Getting magic from %s\n", argv[1]);
magic = magic_open(MAGIC_MIME_TYPE);
magic_load(magic, NULL);
magic_compile(magic, NULL);
mime = magic_file(magic, argv[1]);
printf("%s\n", mime);
magic_close(magic);
return 0;
}
El código siguiente utiliza el valor por defecto de base de datos de magia/usr/share/misc/magic. Una vez que haya instalado los paquetes de desarrollo, la página man de libmagic es bastante útil. Sé que esta es una vieja pregunta, pero la encontré en mi búsqueda de la misma respuesta. Esta fue mi solución preferida.
Muy mal. ¿Pero no es capaz Apache de descubrir el tipo de mimet sin verificar la extensión de archivo? Conozco a algunos de mis amigos que escriben, por ejemplo, http: //domain.tld/picture y sus Apache devolviendo un JPG. ¿Eso es porque el tipo mimet está en el JPG? ¡Gracias por una respuesta rápida! – petsson
el "archivo" de la utilidad Unix hace (muy) buenas conjeturas en tipos de archivos examinando encabezados, estructuras de datos, etc. ¡Pero usa un archivo separado (típicamente/usr/share/file/magic) para almacenar la heurística de búsqueda! La mod_mime_magic de Apache funciona de la misma manera. – Alnitak
Bien, entonces lo sé. ¡Gracias de nuevo! – petsson