2012-11-09 7 views
1

나는 수천 개의 이미지를 이진 형식으로 데이터베이스에 저장하고 있습니다. 나는 테이블의 다른 컬럼을 사용하는 대신 PHP GD로 MIME 타입을 결정하고 싶다.BLOB에서 이미지의 MIME 유형을 결정 하시겠습니까?

임시 이미지 파일을 읽거나 쓰지 않고이 작업을 수행하는 가장 좋은 방법은 무엇입니까?

+0

임시 파일이있는 경우 어떻게 할 것인지 코드를 보여주십시오. – hakre

답변

2

당신은 내가이 조금 오래 알고 getimagesizefromstring

+0

간단하지만, 아직이 기능을 Google에서 검색하지 못했습니다. 고맙습니다. – Lee

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 -class를 확인하고 존재하는 경우 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"; 

, 나는 당신이 조정할 수 있습니다 대체 등의 기본 마임을 사용하고 있습니다.

: 후자는 또한 인코딩을 포함로 FILEINFO_MIME_TYPE 만 마임 타입을 반환하는 반면 finfo를 사용하여, 당신은 대신 FILEINFO_MIMEFILEINFO_MIME_TYPE을 할 수 있습니다. 필자의 경우, 인코딩이 도움이되는 http content-type 헤더에 $mimetype을 사용합니다.

관련 문제