2012. 4. 25. 12:42ㆍNOTE/IT
phpschool.com 의 - 박상용님의 소스 -
파일 업로드 예제(Class 활용)
파일 업로드하면서 여러가지 체크를 하게되죠?
클래스로 묶어 보았습니다.
upload.php의 상단 클래스 정의 부분을 require 시켜서 사용하시면 다른 페
이지에도 쉽게 사용하실 것 같고요.
linux,apache와 win2000,apache, win2000,iis에서 테스트를 해보았습니다.
초보자 분들께서 보시면 유용할 듯 싶네요.
굳이 클래스 내부에 포함하지 않아도 될 것도 있었으나 일반적인 파일업
로드에 쓰이는 부분들이라 포함시켜보았습니다.
비효율적인 부분이 있으면 지적해주세요. 자꾸 수정해야 좋은 소스가 나오
는 것 아니겠습니까? ^^
그럼 20000.
// # upfile.htm
-----------------------------------------------------------------
<HTML>
<HEAD>
<TITLE>파일 업로드 테스트</TITLE>
</HEAD>
<BODY>
<FORM NAME="upFileForm" METHOD="post" ENCTYPE="multipart/form-data" ACTION="upload.php">
<INPUT TYPE="file" NAME="upfile"> <INPUT TYPE="submit" VALUE="전송">
</FORM>
</BODY>
</HTML>
-----------------------------------------------------------------
// # upload.php
-----------------------------------------------------------------
<?
// # 파일 업로드 클래스
class upload{
var $file; // ' 업로드 파일
var $upload_path; // ' 파일을 저장할 경로
var $file_size; // ' 파일 크기
var $file_name; // ' 파일의 이름
var $file_front_name; // ' 확장명을 제외한 이름
var $file_ext_name; // ' 파일의 확장자
// # 클래스 초기화
// ' $up_file : 업로드 파일
// ' $up_file_name : 업로드 파일의 이름
// ' $up_file_size : 업로드 파일의 크기
// ' $up_save_path : 업로드할 경로
function init($up_file,$up_file_name,$up_file_size,$up_save_path){
$this->file = $up_file;
$this->upload_path = $up_save_path;
$this->file_name = $up_file_name;
$this->file_size = $up_file_size;
// ' 파일의 확장자와 이름을 구분한다.
$this->file_front_name = $this->cutFileName("name"); // ' 확장자를 제외한 이름
$this->file_ext_name = $this->cutFileName("ext"); // ' 파일의 확장자
}
// # 파일 이름 구분 함수
// ' $mode="ext" : 확장자명을 반환해 준다.
// ' $mode="name" : 확장자를 제외한 이름을 반환해준다.
function cutFileName($mode){
$len = strlen($this->file_name);
$dot = strpos($this->file_name,".");
if($mode == "ext"){
return substr($this->file_name,$dot+1,$len);
}
else if($mode == "name"){
return substr($this->file_name,0,$dot);
}
}
// # 파일의 크기를 제한하는 함수
// ' $limit_size : 제한할 크기(1024*2000 = 2MB)
function limitSize($limit_size){
if($this->file_size > $limit_size){
return false;
}
else{
return true;
}
}
// # 확장자 제한 함수
// ' $exmode="normal" : 프로그램 파일 업로드 금지때
// ' $exmode="img" : 이미지만 업로드 시킬때
function limitExt($exmode){
if($exmode == "normal"){
if($this->file_ext_name == "php" || $this->file_ext_name == "php4" || $this->file_ext_name == "shtml" || $this->file_ext_name == "cgi"){
return false;
}
else{
return true;
}
}
else if($exmode == "img"){
if($this->file_ext_name == "gif" || $this->file_ext_name == "jpg"){
return true;
}
else{
return false;
}
}
}
// ' 파일 중복 체크후 새로운 이름 반환 함수
// ' $smode = "d" : "날짜형으로 파일이름 반환
// ' $smode = "c" : "파일이름_숫자"형으로 파일이름 반환
function getSaveName($smode){
if($smode == "d"){
$date = getdate();
$str_name = $date['year'].$date['month'].$date['mday'].$date['hours'].$date['minutes'].$date['seconds'].".".$this->file_ext_name;
return $str_name;
}
else if($smode == "c"){
$i = 1;
$str_name = $this->file_name;
while(file_exists($this->upload_path.$str_name)){
$str_name = $this->file_front_name."_".$i.".".$this->file_ext_name;
$i++;
}
return $str_name;
}
}
// # 파일 저장 함수
// ' $save_file_name: 저장할 이름
function fileSave($save_file_name){
copy("$this->file",$this->upload_path.$save_file_name);
unlink("$this->file");
}
}
// ' 클래스 사용하기
//$path = "/home6/yhcine/public_html/pop_up/pop_upload/"; // ' Linux
$path = "c:homepds"; // ' Window
$clsUpload = new upload; // ' Instance 생성
$clsUpload->init($upfile,$upfile_name,$upfile_size,$path); // ' 클래스 초기화
if(!$clsUpload->limitSize(1024*2000)) exit; // ' 용량제한 체크
if(!$clsUpload->limitExt("normal")) exit; // ' 확장자 체크
$sName = $clsUpload->getSaveName("d"); // ' 저장명 받아오기
$clsUpload->fileSave($sName); // ' 파일 저장
?>
-----------------------------------------------------------------
'NOTE > IT' 카테고리의 다른 글
[JAVA SCRIPT] 이벤트 (0) | 2012.04.25 |
---|---|
[HTML] 웹 폰트 적용 (0) | 2012.04.25 |
[PHP] 기초 문법 정리 (0) | 2012.04.25 |
[HTML] 디자인 테이블 소스 (0) | 2012.04.25 |
엑셀(EXCEL) 메크로 (0) | 2012.04.25 |