왕초보질문입니다...ㅠㅠ > 그누4 질문답변

그누4 질문답변

그누보드4 관련 질문은 QA 로 이전됩니다. QA 그누보드4 바로가기
기존 게시물은 열람만 가능합니다.

왕초보질문입니다...ㅠㅠ 정보

왕초보질문입니다...ㅠㅠ

본문

또다니는 소스 하나 주어서 적용하였습니다.
근데 아래건 그냥 파일 하나만 업로드 하는것이라서
여러개 한번에 업로드 할 수 없을려나 하고 한창 수술
하다가 고수님들에게 물어봅니다... ㅠㅠ
그냥 제가 지정한 폴더에 지정한 이름으로 업로드 하려 합니다...
꼭 좀 부탁 드립니다...ㅠㅠ
 
 
 
 
파일명 : test1.php
 
<form name="form" method=post action="test2.php" enctype="multipart/form-data">
<input type='file' name='userfile'><br>
<input type=submit value=업로드>
<input type=reset value=취소>
</form>
 
두번째 파일은 위에서 사용자가 업로드한 파일을 처리하는 페이지입니다.
이 파일에서 맨위에 $dir 변수는 자신의 테스트서버 환경에 맞는 폴더를 설정해 주세요.
그리고 폴더 퍼미션은 최소 707 이어야 합니다.
 
 
파일명 : test2.php
 
<?
$dir = "upload/"; //저장될 폴더 경로(끝에 '/'슬래시 꼭 붙여주세요...^^)

$varName = "userfile"; //이전 페이지에서 설정된 file 변수명
$allowExt = "jpg,gif,png"; //업로드 가능한 확장자 (,)콤마로 구분
$prefix = time(); //파일명 앞에 자동으로 붙을 단어
 
function goBack($msg='', $url='') {
   echo "<script>";
   if($msg) echo 'alert("'.$msg.'");';
   if($url) echo 'location.replace("'.$url.'");';
   else echo 'history.go(-1);';
   echo "</script>";
}
 
if($_FILES[$varName][name] && $_FILES[$varName][error] == 0) {
   // $dir 폴더가 지정됐고, 사용가능 한지 검사
   if(!$dir) {
      goBack("업로드 폴더가 지정되지 않았습니다.");
      exit;
   }
   if(!is_writable($dir)) {
      goBack("업로드 폴더 권한을 확인해 주세요.");
      exit;
   }
   // php.ini 파일에 설정된 upload_max_filesize 값을 이용해서 업로드 파일이 용량을 초과했는지검사
   $allowSize = intval(substr(ini_get(upload_max_filesize),0,-1)) * 1024 * 1024;
   if($allowSize < $_FILES[$varName][size]) {
      goBack("파일 용량이 허용된 용량을 초과했습니다.");
      exit;
   }
   // 정상적인 방법으로 업로드 된 파일인지 검사 후 정상이면 파일 업로드 처리
   if(is_uploaded_file($_FILES[$varName][tmp_name])) {
      // 확장자 검사
      $ext = substr(strrchr($_FILES[$varName][name],"."),1);
      if($ext) {
         $allow = explode(",",$allowExt);
         if(is_array($allow)) $check = in_array($ext,$allow);
         else $check = ($ext == $allow) ? true : false;
      }
      if(!$ext || !$check) {
         goBack("업로드 불가능한 확장자 입니다.");
         exit;
      }
      // 파일명 생성 및 존재하는지 검사
      $newfile = md5($prefix.$_FILES[$varName][name]);
      if(file_exists($dir.$newfile)) {
         goBack("같은이름의 화일이 있습니다. 화일명을 변경하고 업로드 하시기 바랍니다.");
         exit;
      }
      // $dir 에 파일 저장
      if(!move_uploaded_file($_FILES[$varName][tmp_name], $dir.$newfile)) {
         goBack("파일 업로드에 실패했습니다.");
         exit;
      }
      if(!chmod($dir.$newfile,0707)) {
         goBack("퍼미션변경에 실패했습니다.");
         exit;
      }
   }
 
   echo "<br>실제파일명 : ".$_FILES[$varName][name]."<br>저장된 파일명 : ".$newfile;
   /*
   - 여기에 디비에 저장하는 구문을 작성합니다.
   - DB 에 저장시 두개의 파일명을 저장해야 합니다. 보안상 저장시 암호화 하여 저장하였기에 다운받을 때는 실제 파일명으로 다운 받을 수 있도록 하기 위함입니다.
   - 파일명은 실제파일명 : $_FILES[$varName][name], 저장된 파일명: $newfile 입니다.
   - 예:mysql_query("update table set real_file_name = '"$_FILES[$varName][name]"', new_file_name = '".$newfile."' where no = '".$no."'");
   */

}
?>

댓글 전체

전체 66,554 |RSS
그누4 질문답변 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1402호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT