2012-11-09 179 views
1

我将数以千计的图像以二进制格式存储在数据库中。我想用PHP GD确定MIME类型,而不是使用表中的另一列。从BLOB确定图像的MIME类型?

没有读写临时图像文件的最佳方法是什么?

+0

如果有临时文件,请显示代码如何执行。 – hakre

回答

2

我知道这是一个有点老了,但我一直在寻找一个解决方案,这出在从MySQL中的BLOB,这是为我工作的方式。我希望它也能帮助别人。我不知道哪种方式最适合性能,但值得测试。

$finfo = new finfo(FILEINFO_MIME); 
$mimeType = $finfo->buffer($myBlobHere); 
1

该OP只询问图像类型。对于图像类型,getimagesizefromstring()效果不错,但finfo适用于其他文件类型。不幸的是,finfo在所有服务器上都不可用。它自PHP 5.3.0起包含,但在Windows系统上经常被禁用。因此,我选择首先使用getimagesizefromstring,如果这不能检测到mimetype,我检查finfo-类,如果它存在,我尝试finfo。

这是联合解决方案:

$imagesize = getimagesizefromstring($blobVal); 
if($imagesize!==false && isset($imagesize['mime'])) 
    $mimetype = $imagesize['mime']; 
elseif(class_exists('finfo')) 
{ 
    $finfo = new finfo(FILEINFO_MIME); 
    $mimetype = $finfo->buffer($blobVal); 
} 
else 
    $mimetype = "application/octet-stream"; 

在这里,我使用的是默认的MIME类型作为后备,你可能需要调整这一点。

注意:使用finfo,你可能想FILEINFO_MIME_TYPE而不是FILEINFO_MIME,因为后者还包含了编码,而FILEINFO_MIME_TYPE只返回MIME类型。在我的情况下,我在http内容类型头中使用$mimetype,其中编码很有帮助。