ホームページ  >  記事  >  バックエンド開発  >  完全にカプセル化されたphpアップロードファイルクラス

完全にカプセル化されたphpアップロードファイルクラス

WBOY
WBOYオリジナル
2016-07-25 08:43:24825ブラウズ
  1. class FileUpload {
  2. private $filepath; //アップロードしたファイルを保存するパスを指定します
  3. private $allowtype=array('gif', 'jpg', 'png', 'jpeg'); files Type
  4. private $maxsize=1000000; //アップロードされるファイルの最大長は 1M です
  5. private $israndname=true; //ランダムに名前を変更するかどうか、false は元のファイル名を使用します
  6. private $originName;ソースファイル名
  7. private $tmpFileName; // 一時ファイル名
  8. private $fileSize; // ファイルサイズ
  9. private $errorNum=0;エラー番号
  10. private $errorMess=""; //エラーレポートを提供するために使用されます
  11. //アップロードされたファイルを初期化するために使用されます
  12. //1. アップロードパスを指定します、2. 許可されるタイプ、3. 制限サイズ、4. するかどうかランダムなファイル名を使用します
  13. //ユーザーが位置によってパラメータを渡し、最初のいくつかのパラメータの値を提供せずに後続のパラメータの値を提供できるようにします
  14. function __construct($options=array()){
  15. foreach($ options as $key=> ;$val){
  16. $key=strto lower($key);
  17. //ユーザーパラメータの配列の添字がメンバー属性名と同じかどうかをチェック
  18. if(!in_array($ key,get_class_vars(get_class($this))) ){
  19. continue;
  20. }
  21. $this->setOption($key, $val);
  22. }
  23. }
  24. プライベート関数 getError(){
  25. $str="アップロードfile {$this->originName} の場合のエラー: ";
  26. switch($this->errorNum){
  27. case 4: $str .= "ファイルがありませんアップロードされました"; Break;
  28. case 3: $str .= "ファイルは部分的にのみアップロードされました"; Break;
  29. case 2: $str .= "アップロードされたファイルは、HTML フォームの MAX_FILE_SIZE オプションで指定された値を超えています" ; Break;
  30. case 1: $str .= "アップロードされたファイルは、HTML フォームの MAX_FILE_SIZE オプションで指定された値を超えました"; Break;
  31. case 1: $str .= "アップロードされたファイルは、upload_max_filesize オプションの値を超えましたin php.ini"; Break;
  32. case -1: $str .= "許可され​​ていないタイプ"; Break;
  33. case -2: $str .= "ファイルが大きすぎるためアップロードできません。{$this-> を超えています。 maxSize} バイト"; Break;
  34. case -3: $str .= "アップロードに失敗しました"; Break;
  35. case -4: $str .= "アップロードされたファイルを保存するディレクトリの作成に失敗しました。アップロード ディレクトリを再指定してください。" ; Break;
  36. case -5: $str .= "アップロードされたファイルへのパスを指定する必要があります"; Break;
  37. default: $str .= "不明なエラー";
  38. }
  39. return $str.'< ;br> ';
  40. }
  41. //ファイルのアップロード パスを確認するために使用されます
  42. プライベート関数 checkFilePath(){
  43. if(empty($this->filepath)) {
  44. $this->setOption('errorNum', - 5) ;
  45. return false;
  46. }
  47. if(!file_exists($this->ファイルパス) || !is_writable($this->ファイルパス)){
  48. if(!@mkdir($this->ファイルパス, 0755) ){
  49. $this->setOption('errorNum', -4);
  50. return false;
  51. }
  52. }
  53. return true;
  54. }
  55. //アップロードするファイルのサイズを確認するために使用されます
  56. プライベート関数 checkFileSize() {
  57. if($this->fileSize > $this->maxsize){
  58. $this->setOPtion('errorNum', '-2');
  59. return false;
  60. }else{
  61. return true; }
  62. }
  63. //ファイルのアップロードタイプをチェックするために使用されます
  64. プライベート関数 checkFileType() {
  65. if(in_array(strto lower($this->fileType), $this->allowtype)) {
  66. return true;
  67. } else{
  68. $this->setOption('errorNum', -1);
  69. return false;
  70. }
  71. }
  72. //アップロードしたファイル名を設定
  73. プライベート関数 setNewFileName(){
  74. if($this-> israndname ){
  75. $this->setOption('newFileName', $this->proRandName());
  76. } else {
  77. $this->setOption('newFileName', $this->originName);
  78. }
  79. }
  80. //ランダムなファイル名を設定します
  81. プライベート関数 proRandName(){
  82. $fileName=date("YmdHis").rand(100,999);
  83. return $fileName.'.'.$this->fileType;
  84. }
  85. プライベート関数 setOption($key, $val){
  86. $this->$key=$val;
  87. }
  88. //ファイルのアップロードに使用されます
  89. function UploadFile($fileField){
  90. $return=true;
  91. //ファイルのアップロード パスを確認します
  92. if(!$this->checkFilePath()){
  93. $this->errorMess=$this->getError();
  94. return false;
  95. }
  96. $name=$ _FILES [$fileField]['name'];
  97. $tmp_name=$_FILES[$fileField]['tmp_name'];
  98. $size=$_FILES[$fileField]['size'];
  99. $error=$_FILES[ $ fileField]['error'];
  100. if(is_Array($name)){
  101. $errors=array();
  102. for($i=0; $iif ( $this->setFiles($name[$i], $tmp_name[$i], $size[$i], $error[$i])){
  103. if(!$this->checkFileSize() | | !$this->checkFileType()){
  104. $errors[]=$this->getError();
  105. $return=false;
  106. }
  107. }else{
  108. $error[]=$this-> ; getError();
  109. $return=false;
  110. }
  111. if(!$return)
  112. $this->setFiles();
  113. }
  114. if($return){
  115. $fileNames=array();
  116. for( $ i=0; $iif($this->setFiles($name[$i], $tmp_name[$i], $ error [$i])){
  117. $this->setNewFileName();
  118. if(!$this->copyFile()){
  119. $errors=$this->getError();
  120. $return=false ;
  121. }else{
  122. $fileNames[]=$this->newFileName;
  123. }
  124. }
  125. }
  126. $this->newFileName=$fileNames;
  127. }
  128. $this->errorMess=$errors;
  129. return $return;
  130. } else {
  131. if($this->setFiles($name, $tmp_name, $size, $error)){
  132. if($this- >checkFileSize() && $this->checkFileType()){
  133. $this->setNewFileName();
  134. if($this->copyFile()){
  135. return true;
  136. }else{
  137. $return =false;
  138. }
  139. }else{
  140. $return=false;
  141. }
  142. }else{
  143. $return=false;
  144. }
  145. if(!$return)
  146. $this->errorMess=$this->getError ();
  147. return $return;
  148. }
  149. }
  150. プライベート関数 copyFile(){
  151. if(!$this->errorNum){
  152. $filepath=rtrim($this->filepath, '/').' /';
  153. $filepath.=$this->newFileName;
  154. if(@move_uploaded_file($this->tmpFileName, $filepath)) {
  155. return true;
  156. }else{
  157. $this->setOption(' errorNum', -3);
  158. return false;
  159. }
  160. }else{
  161. return false;
  162. }
  163. }
  164. //設定と$_FILESに含まれる内容
  165. private function setFiles($name="", $tmp_name=' ', $size=0, $error=0){
  166. $this->setOption('errorNum', $error);
  167. if($error){
  168. return false;
  169. }
  170. $this->setOption( 'originName', $name);
  171. $this->setOption('tmpFileName', $tmp_name);
  172. $arrStr=explode('.', $name);
  173. $this->setOption('fileType', strto lower($arrStr[count($arrStr)-1]));
  174. $this->setOption('fileSize', $size);
  175. return true;
  176. }
  177. //获取上传後文件用文件名
  178. function getNewFileName(){
  179. return $this->newFileName;
  180. }
  181. //上传如果失败,调用这个方法,就可看看错误报告
  182. function getErrorMsg() {
  183. return $this->errorMess;
  184. }
  185. }
复制代
装好、上传文件、php


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。