Lấy mime-type bằng hàm fileinfo trong PHP 5.2.11

Mình chia sẻ cách kiểm tra “ruột” file trong php và version mình sử dùng là 5.2.11. Mình tiến hành như sau
1. Những file cần thiết.

Bạn cần phải có database của mime-type. Hãy download tại đây

2. Những điều cần làm

a. Copy những file bạn vừa download vào thư mục đặt code web của bạn

b. Cấu hình cho enable php_fileinfo.dll trong file php.ini bằng cách thêm vào hoặc bỏ comment dòng extension=php_fileinfo.dll

c. Đoạn mã dùng để lấy về type của file:

$fileinfo = fileinfo_open(FILEINFO_MIME, 'Đường dẫn đến file magic mà bạn đã download');
$type = fileinfo_file($fileinfo, $file['tmp_name']);
echo $type;
finfo_close($finfo);

3. Những lỗi có thể gặp.

a. Lỗi 1.

PHP Fatal error:  Call to undefined function finfo_open() in C:\Web\Đồ án của bạn\test.php line….

Nguyên nhân:do bạn chưa enable php_fileinfo.dll. Hãy xem cách enable php_fileinfo.dll ở trên

b. Lỗi 2:

[09-May-2010 18:28:57] PHP Warning:  finfo_open() [<a href=’function.finfo-open’>function.finfo-open</a>]: Failed to load magic database at ‘(null)’. in C:\Web\test.php on line 36
[09-May-2010 18:28:57] PHP Warning:  finfo_file(): supplied argument is not a valid file_info resource in C:\Web\test.php on line 37

Nguyên nhân: do bạn truyền sai đường dẫn đến mime-type database. Hãy xem lại mục 2 để khắc phục.

c. Lỗi 3: đây là một lỗi hiếm, vì lỗi này chỉ xảy ra khi chúng ta cài PHP trên môi trường Windows. Giá trị trả về cho biến $type của đoạn code ở mục 2 luôn là “application/x-dpkg”. Nguyên nhân của vấn đề xuất phát từ file magic.mime có chứa ký tự “!”. Trên môi trường Windows trả về 1 match nếu gặp những điều kiện bắt đầu với “!”. Chúng ta phải thay thế những điều kiện bắt đầu với “!” bằng “\!”.

Ví dụ như:
0    string        !<arch>\ndebian application/x-dpkg
đổi thành:
0    string        \!<arch>\ndebian application/x-dpkg

Hết. Happy coding :)


One comment

Leave a Reply

Your email address will not be published. Required fields are marked *