2013-07-19 4 views
1

MySQL 데이터베이스에 작은 엄지 손가락을 저장하고 있습니다. PHP를 사용하면 이미지에서 미리보기 이미지를 만들고 그 이미지를 BLOB 열에 저장하기 만하면됩니다.이미지를 MySQL BLOB에 저장하십시오.

MySQL은 바이너리 이미지를 Base64 문자열로 데이터베이스에 저장하는 것으로 보입니다. 문제는 MySQL이 jpg 파일 대신 application/octet-stream 파일로 저장하는 것입니다.

<?php 
$encoded_string = "...."; 
$imgdata = base64_decode($encoded_string); 

$f = finfo_open(); 

$mime_type = finfo_buffer($f, $imgdata, FILEINFO_MIME_TYPE); 

echo $mime_type; 
?> 

MySQL은 자동으로 Base64로 문자열 내 이미지를 변환 할 수 있습니다 :

나는 내가이 코드를 사용하여 Base64로 문자열을 테스트하기 때문에 알아? 그렇다면 JPG로 저장하는 방법이 있습니까?


나는 파일 시스템에 엄지 손가락을 절약 잘 알고,하지만 불행히도 그렇지 않다와 나는 파일 시스템에 저장에 대한 답을 찾고 있지 않다. 나는 그것이 왜 octed stream으로 저장되었는지 알고 싶습니다. 내가 지금처럼 엄지 손가락을 만들 WideImage을 사용하고

:

 $thumb = \WideImage::load ($filepath) 
          ->resize(117, 88) 
          ->crop ('center', 'center', 117, 88) 
          ->asString('jpg'); 

변수 $thumb 유효 이진 데이터가 포함되어 있습니다. 나는 그것을 인쇄 할 수 있고 좋게 보이기 때문에, 또한 fwrite는 좋은 JPG를 쓴다.

그런 다음 INSERT 쿼리를 사용하여 데이터베이스에 저장합니다. 하지만 다시 SELECT를하면 다시 octed stream 형식이됩니다.

+4

파일 시스템에 이미지를 저장하고 MySQL을 통해 이미지를 참조해야합니다. –

+2

mysql은 blob을 저장하기 위해 base64를 사용하지 않습니다. base64는 공간이 비효율적 인 형식이며 원시 바이너리 버전에 비해 33 %의 비용이 든다. MySQL은 mime-type에 대해서도 신경 쓸 필요가 없었다. 블롭이라면 일련의 비트로 진행됩니다. 그것은 jpg, pdf 또는 텍스트 형식의 할머니의 사과 파이 요리법 인 경우 중요하지 않습니다. –

+0

이미지를 얻으려면 방울을 울릴 수 있습니다. 나는 mysql이 MIME 형식에 대해 정말로 신경 쓰지 않는다고 생각한다. –

답변

2

가장 좋은 방법은 이미지를 파일 시스템에 저장 한 다음 MySQL을 통해 위치를 참조하는 것입니다. MySQL에 이미지를 저장하는 것은 권장되지 않습니다. 왜 여분의 스트레스가 데이터베이스에 필요없는가요? 모든 대형 웹 사이트 (Facebook 등)는 이미지를 파일 시스템에 저장합니다.

+2

모든 대형 웹 사이트에는 아마도 하나 이상의 전용 서버가있을 것입니다. 호스팅 계획이있는 평균 Joe에게는 파일 수 제한이있을 수 있습니다. 예를 들어 1000으로 제한됩니다. PHP 파일을 공제하면 많이 남지 않습니다. – Twifty

관련 문제