2012-11-09 167 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,其中編碼很有幫助。