웹마스터 팁
page_full_width" class="col-xs-12" |cond="$__Context->page_full_width">
대용량 파일 업로드 컴포넌트
2005.06.15 14:14
http://sangsangsoft.com정말 마지막 버젼이 아닐까 생각한다 ㅡ.ㅡ
ver4에서 업그레이드 된 부분은 아래와 같다.
기존의 중복방지 (시분초) 를 붙이던 부분을 찜찜함을 이기지 못 하고 타임스탬프 값으로 교체했다. 결론적으로 거의 중복이 일어날 상황이 없다는 것이다.
data.zip ==(중복발생)==> data(1234567890).zip 로 변경
기존에는 중복발생시 그래도 의미있는 값을 붙여보고자 했는데 생각해 보니 별 쓸모 없는 값이었다. 어차피 더미라고 생각되서 타임스탬프를 사용하기로 했다.
여기까지가 끝이라고 생각했는데... 어떤분이 .php나 기타 스크립트 파일을 업로드 제한을 해달라고 해서 적용해 봤다.
사실 업로드만 신경써서 다른 스크립트 파일이 올라갔을 때는 신경 안 쓰고 있었는데 이것도 큰 문제일것 같아서 아래와 같이 처리해 봤다.
.php .php3 .php4 .htm .html .cgi .pl .jsp .asp 파일이 업로드 되면 긑에 .txt를 붙여서 일반 텍스트 파일로 인식하게 했다.
그냥 막아 버리면 업로드컴포넌트 역활을 넘어서기에 업로드를 시키는대신 .txt를 붙이므로 스크립트 실행을 막았다.
이제 마지막이라는 기분으로 사용법을 정리하자면...
업로드폼이 있는 html 파일에서
<form method="post" action="upload.cgi" enctype="multipart/form-data">
이거 밑에 이 두가지 히든 폼이 반드시 들어가야 된다. 업로드 태그보다 앞에 있어야 된다는 말이다.
<input type="hidden" name="upload_dir" value="up/">
<input type="hidden" name="return_url" value="end.php">
name="upload_dir" value="up_data/" <== 업로드 시킬 경로 마지막 /는 붙이던 안 붙이던 상관없음. upload.cgi를 중심으로 상대경로를 적어주면 된다.
name="return_url" value="end.php" <== 업로드가 완료되고난 후 이동할 파일 ( 보통 여기서 DB 작업을 하게 된다. 업로드폼의 데이터가 post로 submit 되기 때문에 일반 프로그램하듯이 그냥 하면 된다. 업로드 파일은 <input type="file" name="upfile"> 이런 식으로 사용시 echo $upfile; 하면 업로드 된 파일의 이름이 나오게 된다. upfile[]의 배열 방식도 echo $upfile[0]; 똑같이 업로드 시킨 파일의 이름이 나오게 된다.
== up.html ==
<form method="post" action="upload.cgi" enctype="multipart/form-data">
<input type="hidden" name="upload_dir" value="up/">
<input type="hidden" name="return_url" value="end.php">
name <input type="text" name="name">
.....
....
..
</form>
아직도 테스트는 하고 있는데 어디서 버그가 발견 될지는 모르겠다. 버그 발견시 즉시 신고를 해주시기 바랍니다^^ 그럼...
ver4에서 업그레이드 된 부분은 아래와 같다.
기존의 중복방지 (시분초) 를 붙이던 부분을 찜찜함을 이기지 못 하고 타임스탬프 값으로 교체했다. 결론적으로 거의 중복이 일어날 상황이 없다는 것이다.
data.zip ==(중복발생)==> data(1234567890).zip 로 변경
기존에는 중복발생시 그래도 의미있는 값을 붙여보고자 했는데 생각해 보니 별 쓸모 없는 값이었다. 어차피 더미라고 생각되서 타임스탬프를 사용하기로 했다.
여기까지가 끝이라고 생각했는데... 어떤분이 .php나 기타 스크립트 파일을 업로드 제한을 해달라고 해서 적용해 봤다.
사실 업로드만 신경써서 다른 스크립트 파일이 올라갔을 때는 신경 안 쓰고 있었는데 이것도 큰 문제일것 같아서 아래와 같이 처리해 봤다.
.php .php3 .php4 .htm .html .cgi .pl .jsp .asp 파일이 업로드 되면 긑에 .txt를 붙여서 일반 텍스트 파일로 인식하게 했다.
그냥 막아 버리면 업로드컴포넌트 역활을 넘어서기에 업로드를 시키는대신 .txt를 붙이므로 스크립트 실행을 막았다.
이제 마지막이라는 기분으로 사용법을 정리하자면...
업로드폼이 있는 html 파일에서
<form method="post" action="upload.cgi" enctype="multipart/form-data">
이거 밑에 이 두가지 히든 폼이 반드시 들어가야 된다. 업로드 태그보다 앞에 있어야 된다는 말이다.
<input type="hidden" name="upload_dir" value="up/">
<input type="hidden" name="return_url" value="end.php">
name="upload_dir" value="up_data/" <== 업로드 시킬 경로 마지막 /는 붙이던 안 붙이던 상관없음. upload.cgi를 중심으로 상대경로를 적어주면 된다.
name="return_url" value="end.php" <== 업로드가 완료되고난 후 이동할 파일 ( 보통 여기서 DB 작업을 하게 된다. 업로드폼의 데이터가 post로 submit 되기 때문에 일반 프로그램하듯이 그냥 하면 된다. 업로드 파일은 <input type="file" name="upfile"> 이런 식으로 사용시 echo $upfile; 하면 업로드 된 파일의 이름이 나오게 된다. upfile[]의 배열 방식도 echo $upfile[0]; 똑같이 업로드 시킨 파일의 이름이 나오게 된다.
== up.html ==
<form method="post" action="upload.cgi" enctype="multipart/form-data">
<input type="hidden" name="upload_dir" value="up/">
<input type="hidden" name="return_url" value="end.php">
name <input type="text" name="name">
.....
....
..
</form>
아직도 테스트는 하고 있는데 어디서 버그가 발견 될지는 모르겠다. 버그 발견시 즉시 신고를 해주시기 바랍니다^^ 그럼...
댓글 4
-
OTLNO
2005.07.06 10:26
-
OTLNO
2005.06.22 01:20
버그가 있어서 수정본 다시 올립니다 ㅠ.ㅠ -
타스케
2005.07.06 00:06
음.. 제로보드 하고 연동 시킬 수도 있을까요? ^^;
그리고 제로보드가 설치된 서버가 아닌 다른 서버로 파일만 저장할 수도 있을까요?
제로보드가 설치된 서버에 파일도 같이 올라가면
트래픽 때문에 제로보드 보기도 힘들 때가 있더군요. ;;
아, 매번 궁금했던 건데 관련 글이 올라왔길래 질문 한번 해 봅니다. =0=; -
타스케
2005.07.06 11:29
아.. 그렇군요. 답변 감사합니다!
예전에 어떤 사이트에서 업로드를 그런 방식으로 하길래 무척 궁금해서요. ^^;
업로드하면 그 파일의 주소는 다른 곳...
그런데 그 사이트가 현재는 망해버려서.. ㅡㅡ;
제목 | 글쓴이 | 날짜 |
---|---|---|
우리가 사랑한지 몇일째 날짜세주는 PHP 소스 [12] | 레드 | 2005.01.16 |
날짜 구하는 함수.. ... [3] | 김명현 | 2005.01.24 |
게시판 테이블 생성을 쉽게하자. [2] | QQQ | 2005.01.29 |
내 컴퓨터가 표현할 수 있는 문자들. [6] | 최호성 | 2005.01.30 |
자바스크립트 단축키 지정을 쉽게하자. [1] | 권태수 | 2005.02.14 |
[날짜 구하는함수업]내일 날짜와 1년 후 년도 구하기 [8] | ssukai | 2005.02.24 |
사용자 등록/DB생성/테이블 생성 [3] | QQQ | 2005.03.03 |
ASC(순차), DESC(역순) 정렬하기. [4] | Xian | 2005.03.03 |
DB에서 각종 기념일을 내용,순서순으로 뽑아 정렬하기.. | 박순영 | 2005.03.17 |
[초보]아주쉬운 PHP로 그림에 글자 입히기 [11] | 김규백 | 2005.04.04 |
winamp 방송정보 읽어오기 심각한 문제해결 | 이승원 | 2005.05.04 |
winamp 방송정보 알아오기 (2005년 새로 코딩한 버전) [8] | 이승원 | 2005.05.06 |
나만의 미니홈 만들기 ㅡ password.php [8] | 예뜨락 | 2005.05.07 |
나만의 미니홈 만들기 ㅡ 간단한 최근글 불러오기 [6] | 예뜨락 | 2005.05.09 |
나만의 미니홈 만들기 ㅡ 메모장 디자인 (html 소스) [4] | 예뜨락 | 2005.05.12 |
mysql 테이블 스키마 보는법. [2] | 최문혁 | 2005.05.14 |
나만의 미니홈 만들기 ㅡ 메모장 소스 | 예뜨락 | 2005.06.09 |
트랙백 기능 구현하기. | 태규 | 2005.06.12 |
대용량 파일 업로드 컴포넌트 [4] | OTLNO | 2005.06.15 |
효율적인 경로 지정하기 [9] | 대류 | 2005.07.27 |
그리고 다른 서버에 업로드는 불가능합니다. upload.cgi를 중심으로 상대 경로에 저장할 수 있습니다. ^^