2011-04-13 10 views

답변

2

간단한 예 :

$blob_data = "something you've got from BLOB field"; 

header('Content-type: image/jpeg'); // e.g. if it's JPEG image 
echo $blob_data; 
1

이 질문은 이미 다른 질문을 제기했으며 다른 곳에서 답변되었습니다. 어제부터이 질문에 대한 내 대답을 자유롭게 살펴보십시오. Image from MySQL database not printing

이 질문은 중복되지 않으며 질문이 다른 경우 알려주십시오.

건배!

2

나는 이것을 중복을 닫습니다 투표를 생각하지만, 제목이 꽤 좋은, 그리고 다른 질문을 통해보고, 나는 일반적인 질문에 대한 완전한 해답을 찾을 수 없습니다. 이런 종류의 질문은 HTTP의 기초에 대한 이해가 부족하다는 것을 배반하기 때문에 나는이 긴 대답을 대신 써 뒀다. 나는 약간의 글을 썼다. 그러나 다음을 이해하는 사람은 아마 이것과 같은 질문을 할 필요가 없을 것이다. 그렇지 않으면 더 구체적인 질문을 할 수 있습니다.

첫 번째 - 이미지 또는 다른 파일을 데이터베이스에 저장하는 경우 아키텍처를 중단하고 다시 고려하십시오. RDBMS는 BLOB를 처리하기 위해 실제로 최적화되지 않았습니다. 파일을 처리하도록 특별히 조정 된 여러 (비 관계형) 데이터베이스가 있습니다. 그들은 파일 시스템이라고 불리며, 이것들은 정말 훌륭합니다. 적어도 정규 파일이 RDBMS에 갇혀있는 것을 발견 한 시간의 95 % 이상이 무의미했습니다. 따라서 먼저 이 데이터베이스에 파일 데이터를 저장하고 데이터베이스에 파일 데이터를 저장하고 데이터베이스에 작은 데이터를 저장해야한다고 가정하면 (가끔은 파일 시스템을 구성 할 수 있으므로 고유 ID가 필요합니다)이 아닙니다.

따라서 데이터베이스에 BLOB를 저장 하시겠습니까?

이 경우, HTTP가 작동하는 방식을 이해해야합니다. 너무 많은 세부 사항에 익숙해지지 않으면, 일부 클라이언트가 URL을 요청할 때마다 (HTTP 요청을 작성) 서버는 HTTP 응답으로 응답합니다. HTTP 응답에는 머리글과 데이터라는 두 가지 주요 부분이 있습니다. 두 부분은 두 개의 연속 된 개행으로 구분됩니다.

Name: value 

와 줄 바꿈으로 구분됩니다

헤더, 와이어에 같이 간단한 일반 텍스트 키/값 쌍입니다.

데이터는 기본적으로 BLOB입니다. 그것은 단지 데이터 일뿐입니다. 데이터가 해석되는 방식은 클라이언트가 제공하는 Content-Type 헤더의 값에 따라 결정됩니다. Content-Type 헤더는 데이터 섹션에 포함 된 데이터의 Internet Media Type을 지정합니다.

이것에 대해 마법 거기에 아무것도가

작업을 참조하십시오. 일반 HTML 페이지의 경우 전체 응답은 사람이 읽을 수 있습니다.다음보십시오 :

GET/

(귀국일 다음) :

Trying 74.125.113.104... 
Connected to google.com. 
Escape character is '^]'. 

지금 입력 :

$ telnet google.com 80 # connect go google.com on port 80 

당신은 같은 것을 볼 수 있습니다.

아주 간단한 HTTP 요청을 만들었습니다! 아마 당신은 응답을 받았습니다. 응답을보십시오. 모든 헤더가 표시되고 빈 줄이 표시되며 그 다음에 Google 홈 페이지의 HTML 코드가옵니다.

그래서요?

이제 웹 서버가 무엇인지 알 수 있습니다. 이들은 요청을 받고 (예 : GET /) 응답을 반환합니다 (머리글 뒤에 빈 줄 (두 개의 연속 된 줄 바꿈) 다음에 데이터가 오는).

웹 응용 프로그램이 정말 당신이 쓰는 모든 그 코드는 요청이 무엇이든 소요 단지 사용자 정의 웹 서버

이며, HTTP 응답으로 변환 :

이제, 그 실현하는 시간 . 그래서 당신은 근본적으로 아파치 나 IIS, nginx, lighty 등등의 특수한 버전을 만들고 있습니다.

웹 서버가 일반적으로 요청을 처리하는 기본 방법은 디렉토리 (문서 루트)에서 파일을 찾고, 보내려는 헤더를 파악한 다음 해당 헤더를 보낸 다음 파일 내용

그러나 웹 서버가 파일 시스템의 모든 파일을 마술처럼 처리하지만 RDBMS의 일부 BLOB는 완전히 인식하지 못합니다. 그래서 너 스스로해야 해. (만약

<?php 
$result = query('select name, blobdata from table where id = 5'); 
$row = fetch_assoc($result); 
header('Content-Type: image/jpeg'); 
echo $row['blobdata']; 
?> 

: 당신이 당신의 BLOB의 내용을 알고있는 경우

, 말, 같은 테이블에서 "이름"열을 기반으로 이름을 지정해야합니다 JPG 이미지를, 당신은 뭔가를 할 수 브라우저가 파일을 표시하는 대신 다운로드해야한다는 사실을 알고 싶다면 다음과 같은 추가 헤더를 사용할 수 있습니다 :

PHP는 머리말을 설정하는 header() 함수를 제공 할만큼 똑똑하고, 먼저 보내지고 (데이터를 분리하여). 헤더 설정이 끝나면 데이터를 전송하기 만하면됩니다.

헤더가 클라이언트에게 데이터 페이로드 처리 방법에 대한 충분한 정보를 제공하는 한 모든 것이 hunkey-dorey입니다.

만세

관련 문제