mysql에 이미지 저장하기 > Database

본문 바로가기
사이트 내 전체검색


회원로그인

오늘 99
어제 319
최대 618
전체 507,292
마음을 나누는 인터넷 일기장 - 통플 다이어리
Database

mysql에 이미지 저장하기

페이지 정보

작성자 nuno 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 작성일03-08-29 12:53 조회12,861회 댓글0건

본문

MySQL에 이미지 저장하기




때때로 이미지를 데이터베이스에 저장하는 것이 파일로 저장하는 것보다 더 편리할
때가 있습니다. MySQL과 PHP는 이런 일을 매우 쉽게 만들어줍니다. 이 글에서 저는
MySQL 데이터베이스에 이미지를 저장하는 방법과 나중에 그것을 드러내 보이는 방법을
설명하고자 합니다.



데이터베이스 설정하기.
~~~~~~~~~~~~~~~~~~~~~~
어떤 보통의 텍스트나 정수영역과 이미지가 저장되어지기 위해 필요한 영역 사이의
차이점은 그 영역속에 지니게 되는데 필요한 데이터의 양입니다. MySQL은 커다란
양의 데이터를 지니기위해 특별한 영역을 사용합니다. 이런 영역들은
BLOBs(BLOB)라고 알려져 있습니다.

MySQL 사이트에서는 BLOB를 아래와 같이 정의하고 있습니다.

BLOB는 데이터의 가변적인 양을 지니고 있을 수 있는 거대한 바이너리 객체이다.
TINYBLOB, BLOB, MEDIUMBLOB와 LONGBLOB의 네가지 BLOB의 형태는 단지 그들이 지니고
있을 수 있는 값의 최대 길이에서만 다를뿐입니다.

MySQL BLOB에 대한 더 많은 정보는 아래에서 확인해 보십시오.
http://www.mysql.com/Manual_chapter/manual_Reference.html#BLOB


이미지를 지니게 될 기본적인 테이블을 생성하기 위해 다음의 구문을
사용하십시오.

CREATE TABLE Images(
PicNum int NOT NULL AUTO_INCREMENT PRIMARY KEY,
Image BLOB
);



업로드 스크립트 설정하기.
~~~~~~~~~~~~~~~~~~~~~~~~~
파일을 업로드하기 위한 예는 Berber(29/06/99)의 File Uploading
(http://webdev.berber.co.il/articles/FileUpload.php3)에서 볼 수 있을 것입니다.
지금 우리에게 필요한 것은 MySQL에 파일을 넣고 그것을 얻는 PHP 스크립트입니다.
다음의 스크립트는 단지 그것 뿐입니다. 스크립트에서 저는 파일필드의 이름을
Picture인 것으로 가정하고 있습니다.

<?
If($Picture != "none") {
$PSize = filesize($Picture);
$mysqlPicture = addslashes(fread(fopen($Picture, "r"),
$PSize));
mysql_connect($host, $username, $password)
or die("SQL 서버에 접속할 수 없습니다.");
@mysql_select_db($db)
or die("데이터베이스를 선택할 수 없습니다.")
mysql_query("INSERT INTO Image (Image) VALUES
'($mysqlPicture)'")
or die("쿼리를 수행할 수 없습니다.");
}
else {
echo "어떤 그림도 업로드하지 않으셨습니다.";
}
?>

이것이 데이터베이스에 이미지를 넣기 위해 필요한 모든 것입니다. 어떤경우에는
여러분이 MySQL에 이미지를 넣으려고 할 때 에러가 발생할 지도모르는데, 그런
경우에는 여러분의 MySQL 버전이 허락하는 최대 패킷의 크기를 확인해 보는 것이
좋습니다. 그런 경우는 매우 적을 테지만, 여러분은 MySQL의 에러 로그내에서 이
에러에 대한 것을 볼 수 있습니다.

위의 파일에서 우리가 한 것은,
1. 만약, If($Picture != "none")으로 파일이 업로드되었는지 확인하고,
2. MySQL내에서 에러들을 피하기 위해 그림의 스트림에 addslashes()를 주고,
3. MySQL에 접속하여 데이터베이스를 선택하고 이미지를 넣도록 한 것입니다.


이미지 나타내기.
~~~~~~~~~~~~~~~~
이제 우리는 이미지를 데이터베이스에 넣는 법을 알았습니다. 우리는 그것들을 얻고
보이는 방법을 만들어 낼 필요가 있습니다. 이것은 이미지를 넣는 것보다 더
복잡하지만, 만약 여러분이 이 단계를 따른다면 이것을 만들어내고 실행하는데
시간이 걸리지 않을 것입니다.

그림을 보이는 데에는 보내어질 헤더가 필요하기 때문에 우리는 단지 하나의
그림외에는 더 볼 수밖에 없는 그런 상태에 봉착하게 될 수도 있습니다.
한번 헤더를 보내게 되면 더 이상의 헤더를 보낼 수 없게 됩니다.

이것이 트릭이 필요한 부분입니다. 시스템을 약간 속이기 위해 우리는 두개의 파일을
사용합니다. 첫번째 파일은 우리가 보이고자 하는 그림이 어디에 있는지를 알고
있는 HTML 템플릿 파일입니다. 이것은 우리가 보이고자 하는 하는 <IMG>
태그를 포함하고 있는 HTML 파일로서, 일반적인 PHP 파일입니다.
두번째 파일은 <IMG> 태그의 SRC 속성에 직접 데이터베이스로 부터 실제 파일
스트림을 제공하기 위해 불리워지는 파일입니다.

첫번째 형태는 보이는 것처럼 매우 간단한 스크립트입니다.

<HTML>
<BODY>
<?
mysql_connect($host, $username, $password)
or die("SQL 서버에 접속할 수 없습니다.");
@mysql_select_db($db)
or die("데이터베이스를 선택할 수
없습니다.");
$result=mysql_query("select * from Images")
or die("쿼리를 실행할 수 없습니다.");
while($row=mysql_fetch_object($result)) {
echo "<IMG
SRC="SecondType.php3?PicNum=$row->PicNum">";
}
?>
</BODY>
</HTML>

그 HTML이 보여지는 동안, 두번째의 SecondType.php3 파일은 우리가 보이고자 하는 각
이미지를 위해 불리워집니다. 이 스크립트는 우리가 이미지를 가져오고 보이는 것을
가능케 하는 Picture ID(PicNum)을 가지고서 불리워 집니다.

SecondType.php3 파일은 이와 같습니다.

<?
$result=mysql_query("select * from Images where PicNum=$PicNum")
or die("쿼리를 실행할 수 없습니다.");
$row=mysql_fetch_object($result);
Header("Content-type:image/gif");
echo $row->Image;
?>

추천 5

댓글목록

등록된 댓글이 없습니다.

Database 목록

Total 75건 1 페이지
Database 목록
번호 제목 글쓴이 날짜 조회 추천
75 windows 2003 MySQL 서비스 프로그램 등록 1067 에러 댓글2 nuno 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 02-11 21821 0
74 [mysql] 윈도우MySQL4.1.12서버 my.ini없이 실행하기 nuno 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 05-20 18083 67
73 VB MySql 연결 및 한글문제 해결 nuno 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 09-06 16823 0
72 Mysql Password() 크랙툴 nuno 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 09-30 15937 7
71 MySQL에서 root 암호(password) 설정 nuno 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 03-03 15686 0
70 MYSQL TEMPORARY 를 이용한 다중 검색 nuno 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 08-29 15233 2
69 MySQL RPM 설치 nuno 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 02-13 15217 0
68 MySQL에서 오라클의 rownum 구현하기 nuno 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 02-21 15016 0
67 MYISAM -> INNODB 변환 nuno 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 10-06 14663 0
66 mysql euckr 을 utf8 로 변경 nuno 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 09-29 14484 0
65 [mysql] NULLIF 함수의 활용 nuno 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 01-16 14339 30
64 mysql의 union연산이 빠르다고 합니다. nuno 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 02-20 13975 0
63 엑셀 파일을 mysql 에 넣는 방법 nuno 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 10-16 13962 3
62 mysql과 Qmail 과 연동하는 방법 nuno 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 08-29 13922 6
61 InnoDB 설치 하기 nuno 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 05-16 13835 54
60 답변글 [1원] mysql 인덱싱 - order by.... nuno 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 10-14 13372 23
59 [mysql] 윈도우MySQL4.1.12 root 암호 잊어 버렸을 경우 nuno 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 05-21 13193 65
58 [mysql] 번역: MySQL은 어떻게 LIMIT 를 최적화하는가 nuno 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 08-25 13132 4
열람중 mysql에 이미지 저장하기 nuno 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 08-29 12862 5
56 mysql 인덱싱 nuno 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 10-12 12710 10
게시물 검색

Copyright © nuno21.net All rights reserved. 상단으로
모바일 버전으로 보기