当前位置:Gxlcms > PHP教程 > 一个php文件上传类

一个php文件上传类

时间:2021-07-01 10:21:17 帮助过:20人阅读

一个简单的php文件上传类,可以自定义文件名,可以设置允许上传的文件类型等,有需要的朋友,可以参考学习下。

代码如下:

  1. <!--?php
  2. /**
  3. * 文件上传类
  4. * bbs.it-home.org
  5. * */
  6. class UpFile{
  7. private $filePath; //文件目的路径
  8. private $fileField; //默认$_FILES[$fileField],通过$_FILES环境变量获取上传文件信息
  9. private $originName; //源文件名
  10. private $tmpFileName; //临时文件名
  11. private $fileType; //文件类型
  12. private $fileSize; //文件大小
  13. private $newFileName; //新文件名
  14. private $allowType=array('jpg','gif','png'); //
  15. private $maxSize=2000000; //允许文件上传的最大度是2M
  16. private $isUserDefName=false; //是否采用用户自定义名
  17. private $userDefName; //用户定义名称
  18. private $isRandName=true; //是否随机命名
  19. private $randName; //系统随机名称
  20. private $errorNum=0; //错误号
  21. private $isCoverModer=true; //是否覆盖模式
  22. function __construct($options=array()){
  23. $this--->setOptions($options); //设置上传时属性列表
  24. }
  25. function uploadFile($filefield){
  26. $this->setOption('errorNum',0); //设置错误位
  27. $this->setOption('fileField',$filefield); //设置fileField
  28. $this->setFiles(); //设置文件信息
  29. $this->checkValid(); //判断合法性
  30. $this->checkFilePath(); //检查文件路径
  31. $this->setNewFileName(); //设置新的文件名
  32. if($this->errorNum<0)
  33. return $this->errorNum;
  34. return $this->copyFile(); //上传文件
  35. }
  36. private function setOptions($options=array()){
  37. foreach ($options as $key=>$val){
  38. if(!in_array($key,array('filePath','fileField','originName','allowType','maxSize','isUserDefName','userDefName','isRandName','randName')))
  39. continue;
  40. $this->setOption($key,$val);
  41. }
  42. }
  43. private function setFiles(){
  44. if($this->getFileErrorFromFILES!=0){
  45. $this->setOptions('errorNum',-1);
  46. return $this->errorNum;
  47. }
  48. $this->setOption('originName',$this->getFileNameFromFILES());
  49. $this->setOption('tmpFileName',$this->getTmpFileNameFromFILES());
  50. $this->setOption('fileType',$this->getFileTypeFromFILES());
  51. $this->setOption('fileSize',$this->getFileSizeFromFILES());
  52. }
  53. private function setOption($key,$val){
  54. $this->$key=$val;
  55. }
  56. private function setNewFileName(){
  57. if($this->isRandName==false&&$this->isUserDefName==false){
  58. $this->setOption('newFileName',$this->originName);
  59. }elseif ($this->isRandName==true&&$this->isUserDefName=false){
  60. $this->setOption('newFileName',$this->proRandName().'.'.$this->fileType);
  61. }elseif ($this->isRandName==false&&$this->isUserDefName=true){
  62. $this->setOption('newFileName',$this->userDefName);
  63. }else {
  64. $this->setOption('errorNum',-4);
  65. }
  66. }
  67. private function checkValid(){
  68. $this->checkFileSize();
  69. $this->checkFileType();
  70. }
  71. private function checkFileType(){
  72. if(!in_array($this->fileType,$this->allowType)){
  73. $this->setOption('errorNum',-2);
  74. }else {
  75. return $this->errorNum;
  76. }
  77. }
  78. private function checkFileSize(){
  79. if($this->fileSize>$this->maxSize){
  80. $this->setOption('errorNum',-3);
  81. }else {
  82. return $this->errorNum;
  83. }
  84. }
  85. private function checkFilePath(){
  86. if(!file_exists($this->filePath)){
  87. if($this->isCoverModer){
  88. $this->makePath();
  89. }else {
  90. $this->setOption('errorNum',-6);
  91. }
  92. }
  93. }
  94. private function proRandName(){
  95. $tmpStr= "abcdefghijklmnopqrstuvwxyz0123456789";
  96. $str="";
  97. for ($i=0;$i<8;$i++){
  98. $num=rand(0,strlen($tmpStr));
  99. $str.=$tmpStr[$num];
  100. }
  101. return $str;
  102. }
  103. private function makePath(){
  104. if(!@mkdir($this->filePath,0755)){
  105. $this->setOption('errorNum',-7);
  106. }
  107. }
  108. private function copyFile(){
  109. $filePath=$this->filePath;
  110. if($filePath[strlen($filePath)-1]!='/'){
  111. $filePath.='/';
  112. }
  113. $filePath.=$this->newFileName;
  114. if(!@move_uploaded_file($this->tmpFileName,$filePath)){
  115. $this->setOption('errorNum',-5);
  116. }
  117. return $this->errorNum;
  118. }
  119. function getNewFileName(){
  120. return $this->newFileName;
  121. }
  122. private function getFileErrorFromFILES(){
  123. return $this->fileField['error'];
  124. }
  125. private function getFileTypeFromFILES(){
  126. $str=$this->fileField['name'];
  127. $aryStr=split("\.",$str); //将字符串分割到数组中
  128. $ret=strtolower($aryStr[count($aryStr)-1]);
  129. return $ret;
  130. }
  131. private function getFileNameFromFILES(){
  132. return $this->fileField['name'];
  133. }
  134. private function getTmpFileNameFromFILES(){
  135. return $this->fileField['tmp_name'];
  136. }
  137. private function getFileSizeFromFILES(){
  138. return $this->fileField['size'];
  139. }
  140. public function getErrorMsg(){
  141. $str="上传文件出错:";
  142. switch ($this->errorNum){
  143. case -1:
  144. $str.="未知错误!";
  145. break;
  146. case -2:
  147. $str.="未允许类型!";
  148. break;
  149. case -3:
  150. $str.="文件过大!";
  151. break;
  152. case -4:
  153. $str.="产生文件名出错!";
  154. break;
  155. case -5:
  156. $str.="上传失败!";
  157. break;
  158. case -6:
  159. $str.="目录不存在!";
  160. break;
  161. case -7:
  162. $str.="建立目录失败!";
  163. break;
  164. }
  165. return $str;
  166. }
  167. }
  168. ?>

人气教程排行