2012-01-23 2 views
3

데이터베이스의 이미지를 큰 BLOB로 저장했습니다. 이제 파일을 검색하여 파일 시스템에 저장하려고합니다.blob을 PHP의 이미지 파일에 저장

다음을 수행했지만 내 파일 시스템에 저장된 이미지가 손상되었습니다.

Approach1 :

$basedir = 'images/'; 
$imagename = strtolower(preg_replace('/([^\w\d\-_]+)/', '-', $row->name)); 
$filename = $basedir . $imagename . '_' . $row->id. '.jpg'; 
$file_content = base64_decode($row->image_data); 
return file_put_contents($filename, $file_content); 

하여 추정 :

$basedir = 'images/'; 
$imagename = strtolower(preg_replace('/([^\w\d\-_]+)/', '-', $row->name)); 
$filename = $basedir . $imagename . '_' . $row->id . '.jpg'; 
fopen($filename,'w'); 
if($fh = fopen("{$filename}", "wb")) { 
    fwrite($fh, base64_decode($row->image_data)); 
    fclose($fh) ; 
} 

도와주세요! BLOB에 인코딩되어 있지 않은 경우

+2

은 왜 BLOB의 데이터가 저장되어있는 base64로 인코딩으로? BLOB의 포인트는 2 진 데이터를 저장하는 것이고, base64의 포인트는 2 진 데이터를 일반 텍스트로 변환하여 예를 들어 VARCHAR에 저장할 수 있도록하는 것입니다. – DaveRandom

+0

비밀 이미지가 있습니까? – Oyeme

+0

예, Base64는 더 많은 리소스 (메모리, 프로세싱)를 활용합니다. –

답변

3

이 트릭을 수행해야합니다

file_put_contents('filename.jpg', $row->image_data); 
+0

이것은 여전히 ​​손상된 이미지를 저장하고 있습니다. BLOB wasnt가 내 케이스에서 인코딩되었습니다. – vineel

관련 문제