- class FileUpload {
- private $filepath; //업로드된 파일을 저장할 경로 지정
- private $allowtype=array('gif', 'jpg', ' png' , 'jpeg'); //업로드가 허용되는 파일 형식
- private $maxsize=1000000; //업로드가 허용되는 최대 파일 길이는 1M입니다.
- private $israndname=true; 임의로 이름을 바꿀지 여부는 false가 아닙니다. 원본 파일 이름을 사용합니다
- private $originName; //소스 파일 이름
- private $tmpFileName; //임시 파일 이름
- private $fileType;
- private $fileSize; //파일 크기
- private $newFileName; //새 파일 이름
- private $errorNum=0; //오류 번호
- private $errorMess=""; 오류 보고서 제공
-
- / /업로드된 파일을 초기화하는 데 사용됩니다
- //1. 업로드 경로 지정, 2. 허용 유형, 3. 크기 제한, 4. 임의의 파일 이름 사용 여부
- / /사용자가 위치 전달 매개변수를 누르지 않도록 허용하고, 처음 몇 개의 매개변수에 대한 값을 제공하지 않고 후속 매개변수에 대한 값을 제공합니다.
- function __construct($options=array()){
- foreach($ options as $key=>$val){
- $key=strtolower($key);
- //사용자 매개변수 배열의 첨자가 구성원 속성 이름과 동일한지 확인
- if(!in_array($key,get_class_vars(get_class($this)))){
- 계속;
- }
- $this->setOption($key, $val);
- }
- }
- 비공개 함수 getError(){
- $str=" 파일 업로드 중 오류가 발생했습니다 {$this->originName}: ";
- switch($this->errorNum){
- 사례 4: $ str .= "파일이 업로드되지 않았습니다."; break;
- 사례 3: $str .= "파일이 부분적으로만 업로드되었습니다."; ;
- case 2: $str .= "업로드된 파일이 MAX_FILE_SIZE 옵션에 지정된 값의 HTML 양식 크기를 초과합니다.";
- case 1: $str .= "업로드된 파일이 해당 값을 초과합니다. php.ini의 upload_max_filesize 옵션"; break;
- case -1: $str .= "충전 종료 Xu 유형"; break;
- case -2: $str .= "파일이 너무 큽니다. , 업로드된 파일은 {$this->maxSize}바이트를 초과할 수 없습니다."; break;
- case -3: $ str .= "업로드 실패"; break;
- case -4: $str .= "실패했습니다. 업로드된 파일을 저장할 디렉터리를 생성하려면 업로드 디렉터리를 다시 지정하세요."; break;
- case -5: $str .= " 업로드된 파일의 경로를 지정해야 합니다."; break;
- 기본값: $str .= "알 수 없는 오류";
- }
- return $str.'
';
- }
- //파일 업로드 경로를 확인하는 데 사용됩니다
- 비공개 함수 checkFilePath( ){
- if(empty($this->filepath)) {
- $this->setOption('errorNum', -5) ;
- return false;
- }
- if (!file_exists($this->filepath) || !is_writable($this->filepath)){
- if(!@mkdir($ this->filepath, 0755)){
- $this ->setOption('errorNum', -4);
- return false;
- }
- }
- return true;
- }
- //파일 업로드 크기를 확인하는 데 사용됩니다.
- 비공개 함수 checkFileSize() {
- if($this->fileSize > $this->maxsize){
- $this- >setOPtion('errorNum', '-2');
- return false;
- }else{
- return true;
- }
- }
- //파일 업로드 확인에 사용됨 유형
- 비공개 함수 checkFileType() {
- if (in_array(strtolower($this->fileType), $this->allowtype)) {
- return true;
- }else{
- $this->setOption('errorNum', -1 );
- return false;
- }
- }
- //업로드된 파일 이름 설정
- 비공개 함수 setNewFileName(){
- if($this->israndname){
- $this->setOption('newFileName', $this->proRandName());
- } else {
- $this-> ;setOption('newFileName', $this->originName);
- }
- }
-
- //임의의 파일 이름 설정
- 비공개 함수 proRandName(){
- $fileName= date("YmdHis").rand(100,999);
- return $fileName.'.'.$this->fileType;
- }
- 비공개 함수 setOption($key, $val){
- $this->$key=$val;
- }
- //파일 업로드에 사용
- function uploadFile($fileField){
- $return=true;
- //파일 업로드 경로 확인
- if(!$this-> checkFilePath()){
- $this->errorMess=$this->getError();
- false 반환;
- }
- $name=$_FILES[$fileField]['name' ];
- $tmp_name=$_FILES[$fileField]['tmp_name'];
- $size=$_FILES[$fileField]['size' ];
- $error=$_FILES[$fileField] ['오류'];
- if(is_Array($name)){
- $errors=array();
- for($i= 0; $iif($this->setFiles($name[$i], $tmp_name[$i], $size[$i], $error [$i])){
- if(!$ this->checkFileSize() || !$this->checkFileType()){
- $errors[]=$this->getError() ;
- $return=false;
- }
- }else{
- $error[]=$this->getError();
- $return=false;
- }
- if(!$return)
- $this-> ;setFiles();
- }
- if($return){
- $fileNames=array();
- for($i= 0; $iif($this->setFiles($name[$i], $tmp_name[$i], $size[$i], $error [$i])){
- $this-> ;setNewFileName();
- if(!$this->copyFile()){
- $errors=$this->getError()
- $return=false;
- }else{
- $fileNames[]=$this->newFileName;
- }
- }
- }
- $this->newFileName =$fileNames;
- }
- $this->errorMess=$errors;
- return $return;
- } else {
- if($this->setFiles($name, $tmp_name, $size, $error) ){
- if($this->checkFileSize() && $this->checkFileType()){
- $this->setNewFileName();
- if($this->copyFile( )){
- true를 반환;
- }else{
- $return=false;
- }
- }else{
- $return=false;
- }
- }else {
- $return=false;
- }
- if(!$return)
- $this->errorMess=$this->getError();
- return $return;
- }
- }
- 비공개 함수 copyFile(){
- if(!$this->errorNum){
- $filepath=rtrim($this->filepath, '/').' /';
- $filepath.=$this->newFileName;
- if(@move_uploaded_file($this->tmpFileName, $filepath)) {
- return true;
- }else{
- $this->setOption('errorNum', -3);
- false 반환;
- }
- }else{
- false 반환;
- }
- }
- //设置와 $_FILES에는 유용한 정보가 있습니다
- 비공개 함수 setFiles($name="", $tmp_name='', $size=0, $error=0){
- $this->setOption(' errorNum', $error);
- if($error){
- return false;
- }
- $this->setOption('originName', $name);
- $this- >setOption('tmpFileName', $tmp_name);
- $arrStr=explode('.', $name);
- $this->setOption('fileType', strtolower($arrStr[count($ arrStr)-1]));
- $this->setOption('fileSize', $size);
- return true;
- }
- //于获取上传后文件文件名
- function getNewFileName(){
- return $this->newFileName;
- }
- //上传如果失败,则调用这个方法,就可以查看错误报告
- function getErrorMsg() {
- return $this->errorMess;
- }
- }
复system代码
|