Tôi vừa triển khai điều này cho một dự án mà tôi đang làm việc. libmagic là những gì bạn đang tìm kiếm. Trên RHEL/CentOS của nó được cung cấp bởi file-libs và file-devel. Debian/Ubuntu dường như là libmagic-dev.
http://darwinsys.com/file/
Dưới đây là một số mã ví dụ:
#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;
}
Đoạn code dưới đây sử dụng mặc định ma thuật cơ sở dữ liệu/usr/share/misc/kỳ diệu. Khi bạn đã cài đặt các gói dev, trang man libmagic khá hữu ích. Tôi biết đây là một câu hỏi cũ, nhưng tôi tìm thấy nó trên săn của tôi cho câu trả lời tương tự. Đây là giải pháp ưa thích của tôi.
Nguồn
2013-12-10 17:30:57
Quá tệ. Nhưng không phải Apache có thể tìm ra mimetype mà không kiểm tra phần mở rộng của tập tin không? Tôi biết một số người bạn của tôi, những người nhập http: //domain.tld/picture và Apache của họ trả về JPG. Có phải vì mimetype có trong JPG không? Cảm ơn bạn đã trả lời nhanh! – petsson
tiện ích Unix "file" làm cho (rất) đoán tốt ở các loại tệp bằng cách kiểm tra tiêu đề, cấu trúc dữ liệu, v.v. Nhưng nó sử dụng một tệp riêng biệt (thường là/usr/share/file/magic) để lưu trữ tra cứu tra cứu! Mod_mime_magic của Apache hoạt động theo cùng một cách. – Alnitak
Được rồi, vậy tôi biết. Cảm ơn một lần nữa! – petsson