728x90
파일 구조
📁fileupload
└ 📁files(파일업로드될 디렉터리)
└ (업로드 된 파일들)
└ 📄fileupload.php (파일 업로드/다운로드 화면 등)
└ 📄fileuploadProc.php (파일 업로드 프로시저)
└ 📄getFile.php (파일 다운로드 프로시저)
📄dbconfig.php (DB 연결 정보)
DB 구조
순번/파일업로드이름/파일저장이름/저장일시/수정일시
화면
<?php
include_once('../dbconfig.php');
$no = $_GET["no"];
//주소에 ?no= 라는 값이 있다면
if($no != null){
$query = " SELECT no ";
$query .= " ,originalFileName ";
$query .= " ,saveFileName ";
$query .= " ,createDateTime ";
$query .= " ,changeDateTime ";
$query .= " FROM fileupload ";
$query .= " WHERE NO = ".$no;
$result = mysqli_query($dbcon, $query);
$row = mysqli_fetch_array($result);
}
?>
<!DOCTYPE html>
<html>
<head>
<title>파일업로드</title>
<script language="javascript" type="text/javascript">
//jQeury의 $( document ).ready(function(){})과 같은 뜻
document.addEventListener("DOMContentLoaded", function(){
var fileAddBtn = document.querySelector('#fileAddBtn');
fileAddBtn.onclick = function(){ //등록버튼을 눌렀을 때
var str = "등록";
if(document.getElementById('getfile'))str="변경";
if(confirm(str+'하시겠습니까?')){
var frm = document.getElementById("fileFrm");
frm.action = "fleuploadProc.php";
frm.submit();
}
}
});
</script>
</head>
<body>
<div id="fileupload-div">
<form id="fileFrm" method="post" enctype="multipart/form-data">
<h3 class="div-title">파일 업로드</h3>
<div class="form-group">
<div class="input-label">등록파일</div>
<div class="input-div">
<?php if ($row > 0): ?>
<!-- 해당 순번에 파일 저장되어 있지 않다면 내용 보여주지x -->
<a href="getFile.php?no=<?=$no?>&originalFileName=<?=$row["originalFileName"]?>&saveFileName=<?=$row["saveFileName"]?>" id="getfile">
<?=$row[originalFileName]?>
</a>
<?php endif; ?>
</div>
</div>
<div class="form-group">
<div class="input-label">파일 업로드</div>
<div class="input-div">
<input type="file" id="file" name="newfile">
</div>
<input type="button" id="fileAddBtn" value="등록">
<!-- db에는 없지만 큰순번을 썼을 때 그 순번으로 등록되지 않게 하기 위해 $no가 아닌 $row의 select값인 no써주기 -->
<input type="hidden" name="no" value="<?=$row[no]?>">
</form>
</div>
</body>
</html>
업로드 프로시저
<?php
include_once('../dbconfig.php');
$no = $_POST["no"];
$returnUrl = "fileupload.php";
date_default_timezone_set("Asia/Seoul");
$saveFileName = date("ymdHis", time()); //오늘날짜기준초까지저장이름으로
if(isset($_FILES)){
$file = $_FILES["newfile"];
$error = $file["error"];
$name = $file["name"];
$type = $file["type"];
$size = $file["size"];
$tmp_name = $file["tmp_name"];
if ( $error > 0 ) {
if($error == 1) echo "<script>alert('"."설정된 최대 파일크기를 초과하였습니다."."');window.close();</script>";
if($error == 2) echo "<script>alert('"."설정된 최대 파일크기를 초과하였습니다."."');window.close();</script>";
if($error == 3) echo "<script>alert('"."파일의 일부만 업로드되었습니다. 재등록 부탁드립니다."."');window.close();</script>";
if($error == 4) echo "<script>alert('"."업로드할 파일이 없습니다."."');window.close();</script>";
if($error == 6) echo "<script>alert('"."웹서버에 임시폴더가 없습니다."."');window.close();</script>";
if($error == 7) echo "<script>alert('"."웹서버에 파일을 쓸 수 없습니다."."');window.close();</script>";
if($error == 8) echo "<script>alert('"."PHP 확장기능에 의한 업로드가 중단되었습니다."."');window.close();</script>";
}else{
$temp = explode(".", $name); //이름,확장자 나눔
$extension = ".".end($temp); //확장자
$saveFileName .= $extension; //저장이름에 확장자 붙이기
if(($size/1024/1024)<20. && $error == 0){ //파일크기 제한
move_uploaded_file($tmp_name, "./files/".$saveFileName); //파일 서버(작업하는 곳)에 업로드
if($no == null || $no ==""){ //넘어온 순번이 없으면 새로 삽입
//insert
$query = "SELECT count(no)+1 AS newnum FROM fileupload";
$result = mysqli_query($dbcon, $query);
$row = mysqli_fetch_array($result);
$no = $row["newnum"];
$query = " INSERT INTO fileupload( ";
$query .= " no ";
$query .= " , originalFileName ";
$query .= " , saveFileName ";
$query .= " , createDateTime) ";
$query .= " VALUES( ";
$query .= " ".$no;
$query .= " , '".$name."' ";
$query .= " , '".$saveFileName."' ";
$query .= " , NOW()) ";
mysqli_query($dbcon, $query);
echo "<script>alert('등록되었습니다.');window.location.href='".$returnUrl."?no=".$no."';</script>";
}else { //넘어온 순번이 있으면 업데이트
//update
$query = " UPDATE fileupload ";
$query .= " SET ";
$query .= " originalFileName='".$name."' ";
$query .= " ,saveFileName='".$saveFileName."'";
$query .= " ,changeDateTime=NOW() ";
$query .= " WHERE NO = ".$no;
mysqli_query($dbcon, $query);
echo "<script>alert('변경되었습니다.');window.location.href='".$returnUrl."?no=".$no."';</script>";
}
}else {
echo "<script>alert('파일 용량이 초과 되었습니다.');window.location.href='".$returnUrl."';</script>";
}
}
}else{
echo "<script>alert('첨부파일이 존재하지 않습니다.');opener.location.href='".$returnUrl."';window.close();</script>";
}
?>
다운로드 프로시저
<?php
$no = $_GET["no"];
$originalFileName = $_GET["originalFileName"];
$saveFileName = $_GET["saveFileName"];
$returnUrl = "fileupload.php";
$targetDir = "./files/";
$file = $saveFileName;
$down = $targetDir.$file;
$filesize = filesize($down);
if(file_exists($down)){
header("Content-Type:application/octet-stream");
header("Content-Disposition:attachment;filename=$originalFileName");
header("Content-Transfer-Encoding:binary");
header("Content-Length:".filesize($down));
header("Cache-Control:cache,must-revalidate");
header("Pragma:no-cache");
header("Expires:0");
readfile($down);
echo "<script>window.location.href='".$returnUrl."?no=".$no."';</script>";
} else{
echo "<script>alert('파일이 존재하지 않습니다.');window.location.href='".$returnUrl."?no=".$no."';</script>";
}
?>
'{ "Hello World!" }; > PHP' 카테고리의 다른 글
(php) PHPMailer 메일 전송 (지메일, Composer 설치, openssl 오류) (0) | 2022.06.22 |
---|---|
php/ 식단 사이트 구조 잡기 (0) | 2022.05.26 |
(php) 함수, 내장 함수 (0) | 2022.05.25 |
(php) 기초 (0) | 2022.05.24 |
(php) 이클립스 개발 환경 구축하기 (0) | 2022.05.23 |