[자주쓰는 기능]PHP 파일 업로드 기능

WEB DEVELOPER/PHP|2018. 12. 19. 11:46

<? include "../common.inc"; // DB 커넥션 개인용 (있으면 DB 에 쌓을수 있겠죠?)

function formatSize($bytes, $decimals = 2) {

$size = array('B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB');

$factor = floor((strlen($bytes) - 1) / 3);

return sprintf("%.{$decimals}f", $bytes / pow(1024, $factor)) . @$size[$factor];

}

// https://webisfree.com/2016-05-22/[php]-파일-크기-사이즈-불러오는-함수-filesize() 여기서 퍼왔습니다~

// 현재 안들어가지네요....

$uploads_dir = 'uploads'; // a.php > 에서 이곳으로 넘어오는 형식이니. 서버설정에 맞게 경로 설정 해주면 되겠습니다.

$allowed_ext = array('hwp','xlsx','xls','txt','jpg','jpeg','png','gif','webm','php','zip','pdf','pptx','doc','alz','psd','ai');

//파일업로드 확장자 가능 목록 더추가하셔도 됩니다.

$name = $_FILES['upFile']['name']; // 이전폼에서 넘어온 파일 이름 <input type="file" name="upFile" >

$error = $_FILES['upFile']['error']; // $_FILES 에 있는 고유 error

$ext = array_pop(explode('.', $name));

// 확장자 입니다. explode 해서 짤라버리네요~ array_pop 함수는 마지막 개체를 빼오는겁니다.

// 파일이름이 abc.jpg 라면 '.' 을 기준으로 확장자는 뒤에것이기때문에 explode로 만 처리한다면

// $ext[1] = 확장자가 되겠네요~

if( $error != UPLOAD_ERR_OK ) {

switch( $error ) {

case UPLOAD_ERR_INI_SIZE:

case UPLOAD_ERR_FORM_SIZE:

echo "파일이 너무 큽니다. ($error)";

break;

case UPLOAD_ERR_NO_FILE:

echo "파일이 첨부되지 않았습니다. ($error)";

break;

default:

echo "파일이 제대로 업로드되지 않았습니다. ($error)";

}

exit;

}

$target = $uploads_dir.'/'.$name; //DB에 저장할 값이니 신경안쓰셔도 될듯합니다.

if( !in_array($ext, $allowed_ext) ) {

// $allowed_ext = array('hwp','xlsx','xls','txt','jpg','jpeg','png','gif','webm','php','zip','pdf','pptx','doc','alz','psd','ai');

// 배열에 포함되지않는 확장자는 if문을 타게됩니다.

echo "허용되지 않는 확장자입니다.";

exit;

}

$tsize = $_FILES['upFile']['size'];

//size 를 Bytes 수로 가져오게 됩니다.

$size = formatSize($tsize);

// 좀더 보기편하게 formatSize 함수를 타게해 50.00KB 이런식으로 DB에 저장하기 위해사용하였습니다.

// 굳이 DB 구현 안하실꺼면 필요 없겠죠...?

$upDate = date("Y-m-d H:i:s");

//현재시간을 update 날짜로 입력하기 위해 사용했습니다 이것도 DB 값

$sequery ="select * from .테이블이름 where 필드명(문서이름) = '".$name."'";

$row = mysql_fetch_assoc(mysql_query($sequery));

// 중복화일이름 체크 .

if(!$row){

$query ="insert into ........set ~~~~~";

mysql_query($query);

// 파일 이동

move_uploaded_file( $_FILES['upFile']['tmp_name'], "$uploads_dir/".iconv("UTF-8","EUC-KR",$name));

Error("업로드 되었습니다.","main.php");

}else{

Error("중복 화일 입니다.","main.php");

}

?>

간단하게 구현해보았는데. PHP 입문분들에게는 조금 헷갈릴수도있겠습니다.

서버자체에서 용량을 설정할수도있고 기본설정이라는게 조금있기때문에.

<input type="file" name="upFile" > 태그를 통해 업로드하는걸 알아보았습니다.

이렇게 해놓고 DB로 저장해두면 게시판형식으로 짜맞추어서

어떤사람이 파일을 올리고 SESSION 값을통해 삭제기능을 막고 다운로드 할수 있게 만들수도 있지요...

아님 로그인 필요없고 파일이름만 쫙불러와서 그냥 ftp 페이지처럼 간단하게 파일다운로드를 할수도있겠죠...

가져다쓰시는건 땡큐입니다~~

댓글()