TP 3.2.3 프레임 파일 업로드 작업 실례 상세 설명

본 고의 실례 는 TP 3.2.3 프레임 워 크 파일 업로드 작업 을 다 루 었 다.여러분 께 참고 하도록 공유 하 겠 습 니 다.구체 적 으로 는 다음 과 같 습 니 다.
양식 업로드
ThinkpHP 에서 업로드 기능 을 사용 하 는 것 은 특별한 처리 가 필요 없습니다.예 를 들 어 다음은 첨부 파일 이 올 라 온 폼 제출 입 니 다.

<form action="__URL__/upload" enctype="multipart/form-data" method="post" >
<input type="text" name="name" />
<input type="file" name="photo" />
<input type="submit" value="  " >
</form>

업로드 기능 을 사용 하려 면 폼 을 enctype="multipart/form-data"로 설정 해 야 합 니 다.
다 중 파일 업로드 지원
여러 파일 로 업로드 할 필요 가 있다 면 폼 만 수정 하면 됩 니 다.

<input type='file' name='photo'>

...로 바꾸다

<input type='file' name='photo1'>
<input type='file' name='photo2'>
<input type='file' name='photo3'>

혹은

<input type='file' name='photo[]'>
<input type='file' name='photo[]'>
<input type='file' name='photo[]'>

두 가지 방식 의 다 중 첨부 파일 업로드 시스템 의 파일 업로드 클래스 는 모두 자동 으로 식별 할 수 있다.
업로드 작업
ThinkpHP 파일 업로드 작업 은 Think\\Upload 클래스 를 사용 합 니 다.앞의 폼 이 현재 컨트롤 러 에 제출 된 upload 방법 을 가정 하면 upload 방법의 실현 코드 를 살 펴 보 겠 습 니 다.

public function upload(){
$upload = new \Think\Upload();//       
$upload->maxSize = 3145728 ;//         
$upload->exts = array('jpg', 'gif', 'png', 'jpeg');//         
$upload->rootPath = './Uploads/'; //          
$upload->savePath = ''; //       ( )  
//     
$info = $upload->upload();
if(!$info) {//           
$this->error($upload->getError());
}else{//     
$this->success('    !');
}
}

업로드 클래스 는 이미지 파일 의 업로드 안전 을 지원 합 니 다.불법 이미지 파일 을 업로드 하려 면 시스템 에서 불법 이미지 파일 을 알려 줍 니 다.업로드 기능 을 더 잘 사용 하기 위해 서 서버 에서 finfo 모듈 지원 을 켜 는 것 을 권장 합 니 다.
업로드 매개 변수
업로드 작업 전에 업로드 한 속성 을 설정 할 수 있 습 니 다.Upload 류 가 지원 하 는 속성 설정 은 다음 과 같 습 니 다.
속성
묘사 하 다.
maxSize
파일 업로드 의 최대 파일 크기(바이트 단위),0 크기 제한 없 음
rootPath
파일 업로드 저장 루트
savePath
파일 업로드 의 저장 경로(루트 경로 에 비해)
saveName
파일 을 업로드 하 는 저장 규칙,배열 과 문자열 방식 정 의 를 지원 합 니 다.
saveExt
파일 저장 접 두 사 를 업로드 합 니 다.설정 하지 않 으 면 원본 파일 접 두 사 를 사용 합 니 다.
replace
같은 이름 의 파일 이 덮어 쓸 지 여부 입 니 다.기본 값 은 false 입 니 다.
exts
업로드 할 수 있 는 파일 접미사(빈 칸 을 제한 하지 않 음),배열 이나 쉼표 로 구 분 된 문자열 설정 을 사용 합 니 다.기본 값 은 비어 있 습 니 다.
mimes
업로드 할 수 있 는 파일 형식(비어 있 는 것 은 제한 되 지 않 음),배열 이나 쉼표 로 구 분 된 문자열 설정 을 사용 합 니 다.기본 값 은 비어 있 습 니 다.
autoSub
업로드 파일 을 자동 으로 하위 디 렉 터 리 로 저장 합 니 다.기본 값 은 true 입 니 다.
subName
하위 디 렉 터 리 생 성 방식 은 배열 이나 문자열 로 정의 합 니 다.
hash
파일 을 만 들 지 여부 의 hash 인 코딩 은 기본적으로 true 입 니 다.
callback
파일 에 리 셋 이 있 는 지 확인 합 니 다.리 턴 파일 정보 배열 이 존재 한다 면
위의 속성 은 두 가지 방식 으로 들 어 갈 수 있 습 니 다:
실례 화 전래
우 리 는 실례 화 할 때 매개 변수 그룹 에 직접 들 어 갈 수 있다.예 를 들 어:

$config = array(
'maxSize' => 3145728,
'rootPath' => './Uploads/',
'savePath' => '',
'saveName' => array('uniqid',''),
'exts' => array('jpg', 'gif', 'png', 'jpeg'),
'autoSub' => true,
'subName' => array('date','Ymd'),
);
$upload = new \Think\Upload($config);//       

saveName 과 subName 의 사용 에 대해 자세히 설명 하 겠 습 니 다.
동적 할당
실례 화 후 동적 할당 업로드 파 라미 터 를 지원 합 니 다.예 를 들 어:

$upload = new \Think\Upload();//       
$upload->maxSize = 3145728;
$upload->rootPath = './Uploads/';
$upload->savePath = '';
$upload->saveName = array('uniqid','');
$upload->exts = array('jpg', 'gif', 'png', 'jpeg');
$upload->autoSub = true;
$upload->subName = array('date','Ymd');

위의 설정 과 실례 화 전입 의 효 과 는 일치한다.
파일 정보 업로드
업 로드 된 인 자 를 설정 하면 Think\\Upload 류 의 upload 방법 으로 첨부 파일 을 업로드 할 수 있 습 니 다.실패 하면 false 로 돌아 가 getError 방법 으로 오류 알림 정 보 를 얻 을 수 있 습 니 다.업로드 에 성공 하면 업로드 에 성공 한 파일 정보 배열 을 되 돌려 줍 니 다.

$upload = new \Think\Upload();//       
$upload->maxSize = 3145728 ;//         
$upload->exts = array('jpg', 'gif', 'png', 'jpeg');//         
$upload->rootPath = './Uploads/'; //          
$upload->savePath = ''; //       ( )  
//     
$info = $upload->upload();
if(!$info) {//           
$this->error($upload->getError());
}else{//              
foreach($info as $file){
echo $file['savepath'].$file['savename'];
}
}

모든 파일 정 보 는 다음 과 같은 정 보 를 기록 한 배열 입 니 다.
속성
묘사 하 다.
key
첨부 파일 업로드 폼 이름
savepath
파일 업로드 저장 경로
name
파일 의 원본 이름 업로드
savename
파일 저장 이름 업로드
size
파일 업로드 크기
type
파일 업로드 MIME 형식
ext
파일 업로드 접미사 형식
md5
파일 을 업로드 하 는 md5 해시 인증 문자열 은 hash 설정 이 열 리 면 유효 합 니 다.
sha1
파일 을 업로드 하 는 sha 1 해시 인증 문자열 은 hash 설정 이 열 리 면 유효 합 니 다.
파일 업로드 에 성공 하면 이 파일 정 보 를 사용 하여 현재 데이터 시트 나 단독 첨부 데이터 시트 에 저장 하 는 등 다른 데이터 작업 을 할 수 있 습 니 다.
예 를 들 어 업로드 정 보 를 데이터 시트 의 필드 에 저장 하 는 것 을 나타 낸다.

$model = M('Photo');
//            
$info = $upload->upload();
//         
$data['photo'] = $info[0]['savename'];
$data['create_time'] = NOW_TIME;
$model->add($data);

단일 파일 업로드
upload 방법 은 다 중 파일 업 로드 를 지원 합 니 다.가끔 은 하나의 파일 만 업로드 하면 Upload 류 가 제공 하 는 upload One 방법 으로 하나의 파일 을 업로드 할 수 있 습 니 다.예 를 들 어:

public function upload(){
$upload = new \Think\Upload();//       
$upload->maxSize = 3145728 ;//         
$upload->exts = array('jpg', 'gif', 'png', 'jpeg');//         
$upload->rootPath = './Uploads/'; //          
//       
$info = $upload->uploadOne($_FILES['photo1']);
if(!$info) {//           
$this->error($upload->getError());
}else{//              
echo $info['savepath'].$info['savename'];
}
}

업로드 원 방법 은 업로드 에 성공 한 후 돌아 오 는 파일 정보 와 업로드 방법의 차 이 는 하나의 파일 정보 만 있 는 1 차원 배열 입 니 다.
파일 이름 규칙 업로드
파일 을 업로드 하 는 이름 규칙(saveName)은 파일 이 충돌 하거나 덮어 쓰 지 않도록 하 는 데 사 용 됩 니 다.명명 규칙 의 정 의 는 고정된 것 이 아니 라 업무 논리 에 따라 조정 할 수 있다.예 를 들 어 타임스탬프 방식 으로 명명 규범 을 정의 하면 여러 파일 을 동시에 업로드 할 때 충돌 이 발생 할 수 있 습 니 다(같은 초 에 여러 파일 을 업로드 할 수 있 기 때문에).따라서 업무 수요 에 따라 적절 한 업로드 명명 규칙 을 설정 해 야 합 니 다.참고 로 saveName 인자 의 구체 적 인 용법 을 말씀 드 리 겠 습 니 다.
1.함수 방식 사용
들 어 오 는 문자열 이 함수 이름 이 라면 함수 동적 으로 업로드 파일 이름 을 생 성 합 니 다(파일 접 두 사 는 포함 되 지 않 음).예 를 들 어:

//        
$upload->saveName = 'time';
//   GUID    
$upload->saveName = 'com_create_guid';

사용자 정의 함수 도 사용 할 수 있 습 니 다.

//          
$upload->saveName = 'myfun';
기본 이름 규칙 설정 은 유 니 키 드 함수 로 유일한 문자열 시퀀스 를 만 드 는 것 입 니 다.
saveName 의 값 은 배열 과 문자열 두 가지 방식 을 지원 합 니 다.하나의 매개 변수 만 있 거나 매개 변수 가 없 는 함수 라면 문자열 설정 을 직접 사용 하면 됩 니 다.추가 매개 변 수 를 입력 하려 면 배열 방식 을 사용 할 수 있 습 니 다.예 를 들 어:

//   date           Y-m-d  
$upload->saveName = array('date','Y-m-d');
//                     
$upload->saveName = array('myFun',array('__FILE__','val1','val2'));

업로드 한 원본 파일 이름 을 사용 하려 면FILE__들 어 오기 때문에 위의 정의 규칙,최종 결 과 는 my Fun('파일 이름 업로드','val 1','val 2')이 실 행 된 결과 입 니 다.
2.업로드 파일 이름 직접 설정
들 어 오 는 인자 가 함수 이름 이 아니라면 파일 이름 을 업로드 하 는 것 으로 간주 합 니 다.예 를 들 어:

$upload->saveName = time().'_'.mt_rand();

업로드 한 파일 이름 을 표시 합 니 다.
물론 필요 하 다 고 생각 되면 업로드 파일 의 이름 규칙 을 고정 적 으로 설정 하여 업로드 파일 을 고정 적 으로 저장 할 수 있 습 니 다.

$upload->saveName = 'ThinkPHP';
3.업로드 파일 이름 이 변 하지 않 음 유지
업로드 한 파일 이름 이 변 하지 않 으 려 면 이름 이 비어 있 는 것 만 설정 하면 됩 니 다.예 를 들 어:

$upload->saveName = '';

일반적으로 같은 파일 이름 이 올 라 와 서 덮어 쓰 는 경우 가 있 기 때문에 변 하지 않 는 것 을 권장 하지 않 습 니 다.
하위 디 렉 터 리 저장
saveName 은 파일 의 저장 규칙 을 설정 하 는 데 사 용 됩 니 다.디 렉 터 리 와 관련 이 없습니다.업로드 한 파일 분자 디 렉 터 리 를 저장 하려 면 autoSub 와 subName 인 자 를 설정 할 수 있 습 니 다.예 를 들 어:

//             (   Ymd)    
$upload->autoSub = true;
$upload->subName = array('date','Ymd');

사용자 정의 함수 로 저장 할 수 있 습 니 다.예 를 들 어:

//                 get_user_id     
$upload->autoSub = true;
$upload->subName = 'get_user_id';

saveName 인자 와 마찬가지 로 subName 의 정 의 는 배열 과 문자열 을 사용 할 수 있 습 니 다.
주의:getuser_id 함수 가 정의 되 지 않 으 면 getuser_id 문자열 을 하위 디 렉 터 리 의 이름 으로 저장 합 니 다.
하위 디 렉 터 리 저장 과 파일 이름 규칙 을 결합 하여 사용 할 수 있 습 니 다.
업로드 구동
업로드 클래스 는 서로 다른 환경 을 지원 할 수 있 습 니 다.해당 하 는 업로드 드라이브 를 통 해 해결 할 수 있 습 니 다.기본 적 인 상황 에서 로 컬(Local)업로드 드라이브 를 사용 합 니 다.물론 현재 기본 업로드 드라이브 유형 도 설정 할 수 있 습 니 다.예 를 들 어:

'FILE_UPLOAD_TYPE' => 'Ftp',
'UPLOAD_TYPE_CONFIG' => array(
'host' => '192.168.1.200', //   
'port' => 21, //  
'timeout' => 90, //    
'username' => 'ftp_user', //   
'password' => 'ftp_pwd', //   ),

현재 Ftp 를 업로드 클래스 의 드라이버 로 사용 하고 있 음 을 표시 합 니 다.업로드 한 파일 은 FTP 를 통 해 지정 한 원 격 서버 로 전 달 됩 니 다.
업로드 클래스 를 실례 화 할 때 지정 할 수도 있 습 니 다.예 를 들 어:

$config = array(
'maxSize' = 3145728,
'rootPath' = './Uploads/',
'savePath' = '',
'saveName' = array('uniqid',''),
'exts' = array('jpg', 'gif', 'png', 'jpeg'),
'autoSub' = true,
'subName' = array('date','Ymd'),
);
$ftpConfig = array(
'host' => '192.168.1.200', //   
'port' => 21, //  
'timeout' => 90, //    
'username' => 'ftp_user', //   
'password' => 'ftp_pwd', //   );
$upload = new \Think\Upload($config,'Ftp',$ftpConfig);//       

thinkpHP 관련 내용 에 관심 이 있 는 독자 들 은 본 사이트 의 주 제 를 볼 수 있다.
본 고 는 ThinkPHP 프레임 워 크 를 기반 으로 한 PHP 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기