2013-10-14 2 views
0

데이터베이스에 저장된 이미지를 표시하려고합니다. 나는 이걸 써 놨어데이터베이스에서 이미지 읽기 및 쓰기

$image = file_get_contents($testPfad); 
$dateigroesse = filesize($testPfad); 

$arrData = unpack("H*hex", $image); 
$data_string = "0x".$arrData['hex']; 

$sql = "INSERT INTO EHS.dbo.T_Signaturen (UnterschriftsDateiName,UnterschriftsBild,Dateigroesse,terminID) VALUES (
     '".$unterschriftsFileName."', 
     CONVERT(varbinary(max),'$data_string'), 
     '".$dateigroesse."', 
     '384_234')"; 
     echo '<hr>'.$sql; 
     insert($sql); 

이 코드로 나는 이미지를 출력했다.

header("Content-type: image/jpeg"); 
$query = "SELECT Dateigroesse, CONVERT(varchar(max), UnterschriftsBild) as content_data FROM EHS.dbo.T_Signaturen WHERE ID = '10'"; 
$result = query($query); 
$content = $result[1]["content_data"];  
$filesize = $result[1]["Dateigroesse"]; 

$content = substr ($content, 2);    // entfernt 0x 
$content = pack("H*", $content); 
print $content; 

모든 것이 제대로 작동하지만 이미지의 일부만 표시됩니다. 이미지 크기를 20kb에서 2kb로 줄였습니다. 그리고 훨씬 더 많은 정보가 표시되므로 이진 데이터가 잘려나 간 것 같습니다. 데이터베이스 열은

그것을 데이터베이스에 저장 블랍 : :)에 합리적 어떠했는지를 우리가 논의하지 말자주십시오 VARBINARY (최대)이다

+0

왜 이미지를 데이터베이스에 저장합니까? 폴더에 저장하지 않고 경로를 데이터베이스에 저장하는 것이 더 좋습니까? –

+0

안전 이유와 PHP 설정 때문에 가능하지 않습니다. – alex

답변

1

이 솔루션은 php.ini 파일에서 ODBC의 최대 허용 문자열 길이를 증가했다 확실, 전체 이미지가 저장되는 (어쩌면 그 함수가 잘못된 것입니다)입니다. 4069 자로 설정되었습니다.

0
  • 당신은 BLOB으로 (최대 2에 열을 정의하려고했다 GB)?
+0

- SQL은 BLOB를 지원하지 않습니다. nvarbinary ist 가변 너비 2 진 문자열. 최대 2GB - SQL Server 관리 Studio에서 복사하여 붙여 넣을 수있는 데이터 스트림이 PHP PHP 문자열보다 훨씬 깁니다. – alex