>  기사  >  백엔드 개발  >  완전히 캡슐화된 PHP 업로드 파일 클래스

완전히 캡슐화된 PHP 업로드 파일 클래스

WBOY
WBOY원래의
2016-07-25 08:43:24828검색
  1. class FileUpload {
  2. private $filepath; //업로드된 파일을 저장할 경로 지정
  3. private $allowtype=array('gif', 'jpg', ' png' , 'jpeg'); //업로드가 허용되는 파일 형식
  4. private $maxsize=1000000; //업로드가 허용되는 최대 파일 길이는 1M입니다.
  5. private $israndname=true; 임의로 이름을 바꿀지 여부는 false가 아닙니다. 원본 파일 이름을 사용합니다
  6. private $originName; //소스 파일 이름
  7. private $tmpFileName; //임시 파일 이름
  8. private $fileType;
  9. private $fileSize; //파일 크기
  10. private $newFileName; //새 파일 이름
  11. private $errorNum=0; //오류 번호
  12. private $errorMess=""; 오류 보고서 제공
  13. / /업로드된 파일을 초기화하는 데 사용됩니다
  14. //1. 업로드 경로 지정, 2. 허용 유형, 3. 크기 제한, 4. 임의의 파일 이름 사용 여부
  15. / /사용자가 위치 전달 매개변수를 누르지 않도록 허용하고, 처음 몇 개의 매개변수에 대한 값을 제공하지 않고 후속 매개변수에 대한 값을 제공합니다.
  16. function __construct($options=array()){
  17. foreach($ options as $key=>$val){
  18. $key=strtolower($key);
  19. //사용자 매개변수 배열의 첨자가 구성원 속성 이름과 동일한지 확인
  20. if(!in_array($key,get_class_vars(get_class($this)))){
  21. 계속;
  22. }
  23. $this->setOption($key, $val);
  24. }
  25. }
  26. 비공개 함수 getError(){
  27. $str=" 파일 업로드 중 오류가 발생했습니다 {$this->originName}: ";
  28. switch($this->errorNum){
  29. 사례 4: $ str .= "파일이 업로드되지 않았습니다."; break;
  30. 사례 3: $str .= "파일이 부분적으로만 업로드되었습니다."; ;
  31. case 2: $str .= "업로드된 파일이 MAX_FILE_SIZE 옵션에 지정된 값의 HTML 양식 크기를 초과합니다.";
  32. case 1: $str .= "업로드된 파일이 해당 값을 초과합니다. php.ini의 upload_max_filesize 옵션"; break;
  33. case -1: $str .= "충전 종료 Xu 유형"; break;
  34. case -2: $str .= "파일이 너무 큽니다. , 업로드된 파일은 {$this->maxSize}바이트를 초과할 수 없습니다."; break;
  35. case -3: $ str .= "업로드 실패"; break;
  36. case -4: $str .= "실패했습니다. 업로드된 파일을 저장할 디렉터리를 생성하려면 업로드 디렉터리를 다시 지정하세요."; break;
  37. case -5: $str .= " 업로드된 파일의 경로를 지정해야 합니다."; break;
  38. 기본값: $str .= "알 수 없는 오류";
  39. }
  40. return $str.'
    ';
  41. }
  42. //파일 업로드 경로를 확인하는 데 사용됩니다
  43. 비공개 함수 checkFilePath( ){
  44. if(empty($this->filepath)) {
  45. $this->setOption('errorNum', -5) ;
  46. return false;
  47. }
  48. if (!file_exists($this->filepath) || !is_writable($this->filepath)){
  49. if(!@mkdir($ this->filepath, 0755)){
  50. $this ->setOption('errorNum', -4);
  51. return false;
  52. }
  53. }
  54. return true;
  55. }
  56. //파일 업로드 크기를 확인하는 데 사용됩니다.
  57. 비공개 함수 checkFileSize() {
  58. if($this->fileSize > $this->maxsize){
  59. $this- >setOPtion('errorNum', '-2');
  60. return false;
  61. }else{
  62. return true;
  63. }
  64. }
  65. //파일 업로드 확인에 사용됨 유형
  66. 비공개 함수 checkFileType() {
  67. if (in_array(strtolower($this->fileType), $this->allowtype)) {
  68. return true;
  69. }else{
  70. $this->setOption('errorNum', -1 );
  71. return false;
  72. }
  73. }
  74. //업로드된 파일 이름 설정
  75. 비공개 함수 setNewFileName(){
  76. if($this->israndname){
  77. $this->setOption('newFileName', $this->proRandName());
  78. } else {
  79. $this-> ;setOption('newFileName', $this->originName);
  80. }
  81. }
  82. //임의의 파일 이름 설정
  83. 비공개 함수 proRandName(){
  84. $fileName= date("YmdHis").rand(100,999);
  85. return $fileName.'.'.$this->fileType;
  86. }
  87. 비공개 함수 setOption($key, $val){
  88. $this->$key=$val;
  89. }
  90. //파일 업로드에 사용
  91. function uploadFile($fileField){
  92. $return=true;
  93. //파일 업로드 경로 확인
  94. if(!$this-> checkFilePath()){
  95. $this->errorMess=$this->getError();
  96. false 반환;
  97. }
  98. $name=$_FILES[$fileField]['name' ];
  99. $tmp_name=$_FILES[$fileField]['tmp_name'];
  100. $size=$_FILES[$fileField]['size' ];
  101. $error=$_FILES[$fileField] ['오류'];
  102. if(is_Array($name)){
  103. $errors=array();
  104. for($i= 0; $iif($this->setFiles($name[$i], $tmp_name[$i], $size[$i], $error [$i])){
  105. if(!$ this->checkFileSize() || !$this->checkFileType()){
  106. $errors[]=$this->getError() ;
  107. $return=false;
  108. }
  109. }else{
  110. $error[]=$this->getError();
  111. $return=false;
  112. }
  113. if(!$return)
  114. $this-> ;setFiles();
  115. }
  116. if($return){
  117. $fileNames=array();
  118. for($i= 0; $iif($this->setFiles($name[$i], $tmp_name[$i], $size[$i], $error [$i])){
  119. $this-> ;setNewFileName();
  120. if(!$this->copyFile()){
  121. $errors=$this->getError()
  122. $return=false;
  123. }else{
  124. $fileNames[]=$this->newFileName;
  125. }
  126. }
  127. }
  128. $this->newFileName =$fileNames;
  129. }
  130. $this->errorMess=$errors;
  131. return $return;
  132. } else {
  133. if($this->setFiles($name, $tmp_name, $size, $error) ){
  134. if($this->checkFileSize() && $this->checkFileType()){
  135. $this->setNewFileName();
  136. if($this->copyFile( )){
  137. true를 반환;
  138. }else{
  139. $return=false;
  140. }
  141. }else{
  142. $return=false;
  143. }
  144. }else {
  145. $return=false;
  146. }
  147. if(!$return)
  148. $this->errorMess=$this->getError();
  149. return $return;
  150. }
  151. }
  152. 비공개 함수 copyFile(){
  153. if(!$this->errorNum){
  154. $filepath=rtrim($this->filepath, '/').' /';
  155. $filepath.=$this->newFileName;
  156. if(@move_uploaded_file($this->tmpFileName, $filepath)) {
  157. return true;
  158. }else{
  159. $this->setOption('errorNum', -3);
  160. false 반환;
  161. }
  162. }else{
  163. false 반환;
  164. }
  165. }
  166. //设置와 $_FILES에는 유용한 정보가 있습니다
  167. 비공개 함수 setFiles($name="", $tmp_name='', $size=0, $error=0){
  168. $this->setOption(' errorNum', $error);
  169. if($error){
  170. return false;
  171. }
  172. $this->setOption('originName', $name);
  173. $this- >setOption('tmpFileName', $tmp_name);
  174. $arrStr=explode('.', $name);
  175. $this->setOption('fileType', strtolower($arrStr[count($ arrStr)-1]));
  176. $this->setOption('fileSize', $size);
  177. return true;
  178. }
  179. //于获取上传后文件文件名
  180. function getNewFileName(){
  181. return $this->newFileName;
  182. }
  183. //上传如果失败,则调用这个方法,就可以查看错误报告
  184. function getErrorMsg() {
  185. return $this->errorMess;
  186. }
  187. }
复system代码
装好, 上传文件, php


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.