NẾU máy chủ của bạn vẫn sử dụng php 5.2 và không có quyền truy cập vào các chức năng của fileinfo, bạn có thể kiểm tra chữ ký tiêu đề tệp (số ma thuật) để xác định loại mime
function mimetype($data)
{
//File signatures with their associated mime type
$Types = array(
"474946383761"=>"image/gif", //GIF87a type gif
"474946383961"=>"image/gif", //GIF89a type gif
"89504E470D0A1A0A"=>"image/png",
"FFD8FFE0"=>"image/jpeg", //JFIF jpeg
"FFD8FFE1"=>"image/jpeg", //EXIF jpeg
"FFD8FFE8"=>"image/jpeg", //SPIFF jpeg
"25504446"=>"application/pdf",
"377ABCAF271C"=>"application/zip", //7-Zip zip file
"504B0304"=>"application/zip", //PK Zip file ( could also match other file types like docx, jar, etc )
);
$Signature = substr($data,0,60); //get first 60 bytes shouldnt need more then that to determine signature
$Signature = array_shift(unpack("H*",$Signature)); //String representation of the hex values
foreach($Types as $MagicNumber => $Mime)
{
if( stripos($Signature,$MagicNumber) === 0 )
return $Mime;
}
//Return octet-stream (binary content type) if no signature is found
return "application/octet-stream";
}
LƯU Ý: Một số chữ ký có thể khớp với các phần của những người khác, ví dụ:chữ ký tệp PK Zip khớp với 4 byte đầu tiên của chữ ký tệp lưu trữ java (.jar), sẽ cần các câu lệnh bổ sung trong vòng lặp foreach để xác định chữ ký chính xác cho kịch bản loại , nhưng đối với tình huống của bạn, điều này nên làm.
Bạn có thể tìm thấy danh sách cập nhật các chữ ký tệp tại http://www.garykessler.net/library /file_sigs.html nếu ai đó cần thêm loại chữ ký tệp.