我从MSAccess(不是我最喜欢的)收到了导出的数据库,然后将其导入MySQL表。有一个名为'customerImage'的列,是一个'long BLOB'类型,'binary'作为属性。如何确定Mime类型?我尝试过不同的方法,但所有这些方法都需要成为一个文件而不是数据。
如果有人可以帮助我使用PHP代码或MySQL命令会很棒。
答案 0 :(得分:4)
如果你的主机仍然使用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文件签名与java archive(.jar)文件签名的前4个字节匹配,需要额外的语句在foreach循环中确定mime类型的正确签名,但对于你的情况,这应该做。
如果有人需要更多文件签名类型,可以在http://www.garykessler.net/library/file_sigs.html找到更新的文件签名列表。
答案 1 :(得分:3)
FileInfo扩展程序,更具体地说,它的finfo_buffer()
功能可能会有所帮助,这里(引用):
此功能用于获取 有关二进制数据的信息 字符串。
从数据库中获取二进制数据并将其传递给此函数可能会起到作用。
注意:它附带PHP> = 5.3
答案 2 :(得分:1)
将blob保存到临时文件并在其上使用php finfo_file函数。
答案 3 :(得分:0)
可以使用FileInfo扩展名。它包含一个名为finfo_buffer()