CREATE TABLE imgblob ( image_id tinyint(3) NOT NULL AUTO_INCREMENT, image_type varchar(25) NOT NULL, image longblob NOT NULL, image_size varchar(255) NOT NULL, image_name varchar(50) NOT NULL, KEY image_id (image_id) ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
upload-image.html
<!DOCTYPE html>
<html>
<head><title>File Upload To Database</title></head>
<body>
<h2>Please Choose a File and click Submit</h2>
<form enctype="multipart/form-data" action="uploadImage.php" method="post">
<div><input name="userfile" type="file"/></div>
<div><input type="submit" value="Submit"/></div>
</form>
</body>
</html>
img_fileUpload_process.php
<?php
include_once ("../lib/db_connect.php");
$connect = dbconn();
if (! isset($_FILES['userfile'])) {
echo '<p>파일을 선택하세요</p>';
}else{
/******************* 업로드 파일 검수 시작 ********************/
$member=member(); //회원정보
if(!isset($member['user_id'])){
myAlert("로그인 후 이용가능합니다.", "../login.php");
exit();
}
$allowed_ext = array('jpg','jpeg','png','gif');
// 변수 정리
$error = $_FILES['userfile']['error'];
$name = $_FILES['userfile']['name'];
$ext = explode('.',$name);
$ext = strtolower(array_pop($ext));
$type=$_FILES['userfile']['type'];
$fileSize=$_FILES['userfile']['size'];
$fileLimit=$_POST['fileLimit'];
if($fileLimit!="all"){ //파일 업로드 제한 없을경우
// 1MB = 1024 (KB);
// 1KB = 1024 (byte);
$filePermitSize=(int)$fileLimit * 1024* 1024; //50MB
if($fileSize >$filePermitSize){
myAlert("파일 용량이 초과 되었습니다.", "../imgUpload.php");
exit;
}
$fileLimit = $fileLimit." MB";
}else{
$fileLimit= "없음";
}
// 오류 확인
if( $error != UPLOAD_ERR_OK ) {
switch( $error ) {
case UPLOAD_ERR_INI_SIZE:
case UPLOAD_ERR_FORM_SIZE:
myAlert("파일이 너무 큽니다.", "../imgUpload.php");
break;
case UPLOAD_ERR_NO_FILE:
myAlert("파일이 첨부되지 않았습니다.", "../imgUpload.php");
break;
default:
myAlert("파일이 제대로 업로드되지 않았습니다.", "../imgUpload.php");
}
exit;
}
//확장자 확인
if( !in_array($ext, $allowed_ext) ) {
myAlert("허용되지 않는 확장자입니다.", "../imgUpload.php");
exit;
}
/********************* 업로드 파일 검수 끝 *********************/
try {
upload();
echo '<p><img src="data:image/bmp;base64,' . base64_encode(getImage(null, pdoConn())) . '" width="200" /></p>';
echo '<p>업로드 처리 되었습니다.</p>';
echo '<p><a href="../imgUpload.php">이미지 파일을 TEXT 형태로 저장</a></p>';
} catch (Exception $e) {
echo '<h4>' . $e->getMessage() . '</h4>';
}
}
function upload(){
if (is_uploaded_file($_FILES['userfile']['tmp_name']) && getimagesize($_FILES['userfile']['tmp_name']) != false) {
/** 이미지 정보를 얻습니다 */
$size = getimagesize($_FILES['userfile']['tmp_name']);
/** * * 변수 할당** */
$type = $size['mime'];
$imgfp = fopen($_FILES['userfile']['tmp_name'], 'rb');
$size = $size[3];
$name = $_FILES['userfile']['name'];
$maxsize = 99999999;
/** * * 파일이 최대 파일 크기보다 작은지 확인 ** */
if ($_FILES['userfile']['size'] < $maxsize) {
/** * * DB에 연결** */
// $dbh = new PDO("mysql:host=127.0.0.1;dbname=testdb", 'root', 'root-password');
/** *오류 모드 설정 ** */
$dbh = pdoConn();
$stmt = $dbh->prepare("INSERT INTO imgblob (image_type ,image, image_size, image_name) VALUES (? ,?, ?, ?)");
/** 매개변수를 바인딩 **/
$stmt->bindParam(1, $type);
$stmt->bindParam(2, $imgfp, PDO::PARAM_LOB);
$stmt->bindParam(3, $size);
$stmt->bindParam(4, $name);
$stmt->execute();
} else {
throw new Exception("파일 크기 에러");
}
}else{
// 파일이 허용된 최대값보다 작지 않으면 오류.
throw new Exception("지원되지 않는 이미지 형식!");
}
}
?>
기타
db_connect.php
<?php
//에러 출력
error_reporting(E_ALL);
ini_set("display_errors", 1);
if ((function_exists('session_status') && session_status() !== PHP_SESSION_ACTIVE) || !session_id()) {
session_start();//세션 시작
}
function dbconn(){
$host_name="localhost"; //호스트네임
$db_user_id="pro5"; //DB
$db_name="pro5"; //DB아이디
$db_pw="pro5"; //DB비번
//mysqli_connect([아이피], [아이디], [비밀번호], [DB명], [포트]);
$connect = mysqli_connect($host_name,$db_user_id,$db_pw, $db_name,'3306') or die("연결에 실패 하였습니다....");
return $connect;
}
function pdoConn(){
$host_name="localhost"; //호스트네임
$db_user_id="pro5"; //DB
$db_name="pro5"; //DB아이디
$db_pw="pro5"; //DB비번
//$dbh = new PDO("mysql:host=127.0.0.1;dbname=test_db", 'root', 'root-password');
$dbh = new PDO("mysql:host=localhost;dbname=".$db_name, $db_user_id, $db_pw);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
return $dbh;
}
function myAlert($msg , $href){
echo '<script>
alert("'.$msg.'");
location.href="'.$href.'";
</script>';
exit;
}
//암호화
function myEncrypted($key, $param){
// 256 bit 키를 만들기 위해서 비밀번호를 해시해서 첫 32바이트를 사용합니다.
$key = substr(hash('sha256', $key, true), 0, 32);
// Initial Vector(IV)는 128 bit(16 byte)입니다.
$iv = chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0);
// 암호화
$encrypted = base64_encode(openssl_encrypt($param, 'aes-256-cbc', $key, OPENSSL_RAW_DATA, $iv));
return $encrypted;
}
//복호화
function myDecrypted($key, $encrypted){
// 256 bit 키를 만들기 위해서 비밀번호를 해시해서 첫 32바이트를 사용합니다.
$key = substr(hash('sha256', $key, true), 0, 32);
// Initial Vector(IV)는 128 bit(16 byte)입니다.
$iv = chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0);
$decrypted = openssl_decrypt(base64_decode($encrypted), 'aes-256-cbc', $key, OPENSSL_RAW_DATA, $iv);
return $decrypted;
}
//로그인 회원 세션 정보
function member(){
global $connect;
$member="";
if(isset($_SESSION["member"])){
$member =$_SESSION["member"];
}
return $member;
}
function getImage($image_id, $pdoConn){
try {
/*** 데이터베이스에 연결 ***/
$dbh = $pdoConn;
/*** PDO 오류 모드를 예외로 설정 ***/
// $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql="";
/*** SQL 문***/
if($image_id==null){
$sql = "SELECT image, image_type FROM imgblob ORDER BY image_id DESC LIMIT 1 ";
}else{
$sql = "SELECT image, image_type FROM imgblob WHERE image_id=$image_id";
}
/*** SQL 준비 ***/
$stmt = $dbh->prepare($sql);
/*** 쿼리를 실행 ***/
$stmt->execute();
/*** 페치 모드를 연관 arra로 설정 ***/
$stmt->setFetchMode(PDO::FETCH_ASSOC);
/*** 이미지의 헤더를 설정 ***/
$array = $stmt->fetch();
/*** 단일 이미지와 유형이 있는지 확인 ***/
if(sizeof($array) == 2)
{
/*** 헤더를 설정하고 이미지를 표시 ***/
// header("Content-type: ".$array['image_type']);
return $array['image'];
}
else{
throw new Exception("Out of bounds Error");
}
}
catch(PDOException $e){
echo $e->getMessage();
}catch(Exception $e){
echo $e->getMessage();
}
}
?>
업로드 된 이미지 목록 불러오기
<?php
include_once ("../lib/db_connect.php");
$conn = dbconn();
$sql = "select * from imgblob";
$result = mysqli_query($conn, $sql);
$count=0;
echo "<a href='index.php'>홈</a>";
while ($row = mysqli_fetch_array($result)) {
$count++;
echo '<p><img src="data:image/bmp;base64,' . base64_encode($row['image']) . '" width="200" /></p>';
}
if($count==0){
echo "<p>등록된 데이터가 없습니다.</p>";
}
?>
참조 :https://salix97.tistory.com/181













댓글 ( 4)
댓글 남기기