Top

[MYSQL] 이미지,파일 업로드 하기 | Web-Programing
안지흠 (hoomiyam) | Editor | 2014/12/26 10:17:32 | 조회:54665

호스팅 서비스를 이용하면서 저장공간의 부족함을 느끼게 됫다. 

특히 이미지파일을 많이 업로드 하게되는데 용량이 아쉽움을 느낀다. 

그래서 대안을 찾던 중 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 이미지 저장 폼

 

  1. <form action='image_up.php' method='POST' enctype='multipart/form-data'>
  2. < input TYPE=hidden name=mode value=insert>
  3. < table>
  4. < tr> <td>올릴 이미지:</td>
  5. < td><input type='file' name='image'></td></tr>
  6. < tr> <td>제목</td>
  7. < td><input type='text' name='title'></td></tr>
  8. < tr> <td colspan = 2>
  9. < input type='submit' value='이미지 전송 '></td></tr>
  10. < /table>
  11. < /form>


 


 2) image_up.php  이미지 저장 후처리

  1. <?
  2. $connect=mysql_connect(  "localhost",  "아이디",  "비밀번호");
  3. mysql_select_db( "디비명",$connect);
  4.  extract($_REQUEST);
  5.  $filename = $_FILES[image][tmp_name];
  6.  $handle = fopen($filename,"rb");
  7.  $size = GetImageSize($_FILES[image][tmp_name]);
  8.  $width = $size[0];
  9.  $height = $size[1];
  10.  $imageblob = addslashes(fread($handle, filesize($filename)));
  11. $filesize = $filename;
  12.  fclose($handle);
  13.  //메모리 오류 방지
  14. ini_set("memory_limit" , -1);
  15.  $query="INSERT INTO  images (image,title,width,height) VALUES ('$imageblob', '$title', '$width','$height')" ;
  16.  $result=mysql_query($query,$connect );
  17.  echo "<script>location.href='images_list.php';</script>";
  18.  ?>


 

 


 3) images_list.php  이미지 보이는 리스트

  1. <?
  2.  $connect=mysql_connect(  "localhost",  "아이디",  "비밀번호");
  3. mysql_select_db( "디비명",$connect);
  4.  $query= "select id, title, width, height from  images order by id DESC " ;
  5.  $result=mysql_query($query,$connect );
  6.  $row=mysql_fetch_array($result);
  7.  echo "<a href=test.php>그림 올리기</a>";
  8.  echo( "<table bordr=1 width=90% align=center>
  9. < tr> <td>이미지</td>
  10.    <td>제목</td>
  11. < /tr>
  12.  ");
  13.  while($row){
  14.      echo ( "<tr><td><a href=view.html?id=$row[id]><img src=./view.html?id=$row[id]
  15.  width=$row[width] height=$row[height] ></a></td>
  16. < td>$row[title]</td> ");
  17.    $row=mysql_fetch_array($result);
  18.    }
  19.    echo( "</table>");
  20.  ?>



 


 4) view.html    이미지 보기

  1. <?
  2.  $connect=mysql_connect(  "localhost",  "아이디",  "비밀번호");
  3. mysql_select_db( "디비명",$connect);
  4.  extract($_REQUEST);
  5.  $query= "select * from images where id=$id" ;
  6.  $result=mysql_query($query,$connect );
  7.  $row=mysql_fetch_array($result);
  8.     Header(  "Content-type:  image/jpeg");
  9.     echo $row[image];
  10.   mysql_close();
  11.  ?>


위에 처럼 테스트 해볼 수 있다.
현재 내가 사용하는 호스팅 업체는 cafe24 인데 여긴 mysql 업로드를 1MB로 한도를 정해놓은 것 같다. 1MB 이상 올리면 실패가 된다.

 

그래도 이게 어디야!

 

 

공유하기
공유하기
2
0
0


댓글을 불러오는 중입니다.
▲ 이전글 [CSS] 크롬에서 textarea 크기조절 안되게 막기 김경훈 (admin) 2014-12-31 13:49:55
▼ 다음글 [PHP] 프로그레스바(BAR) 만들기! 김경훈 (admin) 2014-11-14 18:56:19