ЕСЛИ ваш хост все еще использует php 5.2 и не имеет доступа к функциям fileinfo, вы можете проверить подпись заголовка файла (магические числа), чтобы определить тип 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";
}
ПРИМЕЧАНИЕ. Некоторые подписи могут частично совпадать с другими, например, подпись файла PK Zip соответствует первым 4 байтам подписи файла java-архива (.jar), потребуются дополнительные операторы в foreach цикла, чтобы определить правильную подпись для типа mime, но для вашей ситуации это должно подойти.
Обновленный список сигнатур файлов можно найти по адресу http://www.garykessler.net/library/file_sigs.html, если кому-то нужно больше типов подписи файлов.
person
Patrick Evans
schedule
23.03.2011
mime_content_type($mysql_row['blob_field')
(я знаю, что это устарело, но большинство хостов еще не перешли на PHP 5.3). Кроме того, вы не можете изменить это (?), гораздо лучше хранить изображения вне базы данных. - person Bojangles   schedule 15.03.2011