|
호스팅 서비스를 이용하면서 저장공간의 부족함을 느끼게 됫다.
특히 이미지파일을 많이 업로드 하게되는데 용량이 아쉽움을 느낀다.
그래서 대안을 찾던 중 mysql 자체에 파일이 업로드가 가능 하다고 하여 테스트 해보았다.
1. 테이블 생성
CREATE TABLE images( id int NOT NULL auto_increment, image mediumblob NOT NULL, title varchar(100) DEFAULT NOT NULL, width smallint(6) DEFAULT NOT NULL, height smallint(6) DEFAULT NOT NULL, filesize int , # 파일크기 PRIMARY KEY (id) ) ;
* 위에서 image 컬럼에 자료형에 대한 간단한 설명 mysql 에는 바이너리를 저장할 수 있는 공간인 blob형이 크기별로 4가지가 있다. tinyblob 255byte blob 64KB mediumblob 16MB longblob 4G 로 되어있다. 하지만 mysql의 바이너리 입출력 처리는 DB에 굉장한 무리를 주므로 mediumblob 사용을 추천한다.
2. 테스트용 소소
인터넷 여기저기 있는 것 주서서 바로 가능하게 수정한 소스 돌아가게만 하기 위한 소스..
1) insert_img.php 이미지 저장 폼
- <form action='image_up.php' method='POST' enctype='multipart/form-data'>
- < input TYPE=hidden name=mode value=insert>
- < table>
- < tr> <td>올릴 이미지:</td>
- < td><input type='file' name='image'></td></tr>
- < tr> <td>제목</td>
- < td><input type='text' name='title'></td></tr>
- < tr> <td colspan = 2>
- < input type='submit' value='이미지 전송 '></td></tr>
- < /table>
- < /form>
2) image_up.php 이미지 저장 후처리
- <?
- $connect=mysql_connect( "localhost", "아이디", "비밀번호");
- mysql_select_db( "디비명",$connect);
-
- extract($_REQUEST);
-
- $filename = $_FILES[image][tmp_name];
- $handle = fopen($filename,"rb");
- $size = GetImageSize($_FILES[image][tmp_name]);
- $width = $size[0];
- $height = $size[1];
- $imageblob = addslashes(fread($handle, filesize($filename)));
- $filesize = $filename;
-
- fclose($handle);
-
- //메모리 오류 방지
- ini_set("memory_limit" , -1);
- $query="INSERT INTO images (image,title,width,height) VALUES ('$imageblob', '$title', '$width','$height')" ;
- $result=mysql_query($query,$connect );
- echo "<script>location.href='images_list.php';</script>";
- ?>
3) images_list.php 이미지 보이는 리스트
- <?
- $connect=mysql_connect( "localhost", "아이디", "비밀번호");
- mysql_select_db( "디비명",$connect);
-
- $query= "select id, title, width, height from images order by id DESC " ;
- $result=mysql_query($query,$connect );
- $row=mysql_fetch_array($result);
- echo "<a href=test.php>그림 올리기</a>";
- echo( "<table bordr=1 width=90% align=center>
- < tr> <td>이미지</td>
- <td>제목</td>
- < /tr>
- ");
-
- while($row){
- echo ( "<tr><td><a href=view.html?id=$row[id]><img src=./view.html?id=$row[id]
- width=$row[width] height=$row[height] ></a></td>
- < td>$row[title]</td> ");
- $row=mysql_fetch_array($result);
- }
- echo( "</table>");
- ?>
4) view.html 이미지 보기
- <?
- $connect=mysql_connect( "localhost", "아이디", "비밀번호");
- mysql_select_db( "디비명",$connect);
-
- extract($_REQUEST);
- $query= "select * from images where id=$id" ;
- $result=mysql_query($query,$connect );
- $row=mysql_fetch_array($result);
-
- Header( "Content-type: image/jpeg");
- echo $row[image];
- mysql_close();
- ?>
위에 처럼 테스트 해볼 수 있다. 현재 내가 사용하는 호스팅 업체는 cafe24 인데 여긴 mysql 업로드를 1MB로 한도를 정해놓은 것 같다. 1MB 이상 올리면 실패가 된다.
그래도 이게 어디야!
|