CODE CAVE

[PHP] 파일 업로드 소스코드 및 분석 본문

Web/Back-End

[PHP] 파일 업로드 소스코드 및 분석

코드케이브 2016. 6. 8. 02:32

PHP로 만드는 파일 업로드는 매우 심플합니다.


시스템 프로그래밍 (유닉스)를 해보셨다면 아마 더 낯 익으실 거예요


이 포스팅은 업로드만 다루고 있구요, 


파일을 읽고 쓰는 것은 이번에 다루진 않지만 read, write도 PHP 언어 자체가 C언어 기반이라 그런지 좀 비슷한 감이 있어서


C언어 하셨던 분들은 한번 찾아서 공부해보시는것도 추천드립니다!



아무튼 본문으로 들어가서 업로드를 설명드리자면 매우 간단 명료 합니다.



방법은 아래와 같습니다.



1. 파일 업로드 할때는 폼에 꼭 enctype을 붙혀줘야 합니다.

보통 PHP코드만 작성하고 이 enctype="multipart/form-data"를 안적어놔서 안되는 경우가 굉장히 많습니다.

여러 질문 사이트의 질문을 보다보면.. 저 또한 오랜만에 파일 다루면 까먹는 부분이기도 합니다 ㅋㅋ; 이게 뭐라고 계속 까먹는지 저도 참 ㅠ

<form action="board_proc.php" method="post" enctype="multipart/form-data">



2. 파일의 임시 이름을 변수에 저장합니다.

실제 파일의 이름이 아니라 그 파일에 임시적으로 PHP가 이름을 붙혀줍니다. 아마 파일이름에 어떤 특수문자나 한글이나 뭐 기타 문자로 인해서 업로드가 안될 수도 있는 상황을 대비해서 tmp_name이란게 나오지 않았을까 생각이 드네요.

$file = isset($_FILES['bfile']['tmp_name']) ? $_FILES['bfile']['tmp_name'] : "";



3. 파일을 실제로 서버에 저장합니다!

file_name은 원본 파일 이름이구요, $file_name2는 서버에 저장할 파일명입니다! 

중복되지 않게 date와 의미있는 스트링을 사용하였습니다.

date는 여러모로 유용해요! 쿠키를 만들때도 date를 활용하면 거의(?) 고유한 값을 만들수 있죠 ㅎㅎ

저는 게시판 파일 업로드라서 전용 폴더를 만들고 넣었습니다.

if(is_uploaded_file($file)) {
$file_name = $_FILES['bfile']['name'];
$ext = file_chk($file_name, "board");
$file_name2 = date("ymdhis")."_community.".$ext;
move_uploaded_file($file, "../data/board/".$file_name2);
}

위에서 쓰인 file_chk 함수는 http://kkotkkio.tistory.com/5 에서 포스팅 했었습니다~


여기까지 하면 파일이 ../data/board/ 안에 업로드 됩니다. 


업로드한 파일을 받아서 파일을 검사하고, 파일이름을 지정하여 서버에 올리는 것 입니다. ㅎㅎ



간단하죠? ㅎㅎ 여기까지 잘 따라오시면 파일업로드가 되실거예요.


천천히 읽어보시면 금방 이해하시는 부분들 입니다.


잘 안되더라도 천천히 디버깅 해보세요~


print_r, echo, exit등을 활용하여 값을 체크해보시는 것도 방법입니다.




PS.


근데 요즘엔 클라우드가 워낙 발달되있어서 파일같은 경우는 거의 스토리지 서버에다가 넣어놓는 편입니다.


특히 게시판 파일의 경우 어느정도 큰 파일을 업로드할 수 있는데 일반 호스팅 업체에서 서버 받는 하드디스크로는 감당하기가 힘들죠~


하드디스크 용량 올리는 것도 돈 꾀받던데.. 


그래서 저는 유클라우드 스토리지 씁니다.


나중에 기회되면 포스팅 해볼게요!





도움이 되셨다면 아래 하트를 뿅..