当前位置:Gxlcms > PHP教程 > php资料上传类

php资料上传类

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

php 文件上传类
  1. <!--?php
  2. /**
  3. * php 文件上传类
  4. * www.jbxue.com
  5. */
  6. class UploadFile {
  7. /**
  8. * 允许的上传文件类型
  9. * @var array $allowFileTypes
  10. * @access private
  11. */
  12. private $allowFileTypes = array('jpeg','jpg','gif','bmp','png');
  13. /**
  14. * 允许的上传文件大小,单位字节
  15. * @var int $maxFileSize
  16. * @access public
  17. */
  18. public $maxFileSize = 8388608;
  19. /**
  20. * 构造函数
  21. */
  22. public function __construct() {
  23. }
  24. /**
  25. * 设置允许的文件类型
  26. * @param mixed $fileTypes 文件类型列表可以是数组和字符串,用“,”号隔开
  27. * @return void
  28. * @access public
  29. */
  30. public function setAllowFileType($fileTypes) {
  31. if (!is_array($fileTypes)) {
  32. $this--->allowFileTypes = explode(',', $fileTypes);
  33. } else {
  34. $this->allowFileTypes = $fileTypes;
  35. }
  36. return;
  37. }
  38. /**
  39. * 上传文件
  40. * @param string $fileField 要上传的文件如$_FILES['file']
  41. * @param string $destFolder 上传的目录,会自动建立
  42. * @param string $fileTypes 上传后文件命名方式0使用原文件名1使用当前时间戳作为文件名
  43. * @return int
  44. * @access public
  45. */
  46. public function upload($fileField, $destFolder = './', $fileNameType = 1) {
  47. switch ($fileField['error']) {
  48. case UPLOAD_ERR_OK : //其值为 0,没有错误发生,文件上传成功。
  49. $upload_succeed = true;
  50. break;
  51. case UPLOAD_ERR_INI_SIZE : //其值为 1,上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值。
  52. case UPLOAD_ERR_FORM_SIZE : //其值为 2,上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值。
  53. $errorMsg = '文件上传失败!失败原因:文件大小超出限制!';
  54. $errorCode = -103;
  55. $upload_succeed = false;
  56. break;
  57. case UPLOAD_ERR_PARTIAL : //值:3; 文件只有部分被上传。
  58. $errorMsg = '文件上传失败!失败原因:文件只有部分被上传!';
  59. $errorCode = -101;
  60. $upload_succeed = false;
  61. break;
  62. case UPLOAD_ERR_NO_FILE : //值:4; 没有文件被上传。
  63. $errorMsg = '文件上传失败!失败原因:没有文件被上传!';
  64. $errorCode = -102;
  65. $upload_succeed = false;
  66. break;
  67. case UPLOAD_ERR_NO_TMP_DIR : //其值为 6,找不到临时文件夹。PHP 4.3.10 和 PHP 5.0.3 引进。
  68. $errorMsg = '文件上传失败!失败原因:找不到临时文件夹!';
  69. $errorCode = -102;
  70. $upload_succeed = false;
  71. break;
  72. case UPLOAD_ERR_CANT_WRITE : //其值为 7,文件写入失败。PHP 5.1.0 引进。
  73. $errorMsg = '文件上传失败!失败原因:文件写入失败!';
  74. $errorCode = -102;
  75. $upload_succeed = false;
  76. break;
  77. default : //其它错误
  78. $errorMsg = '文件上传失败!失败原因:其它!';
  79. $errorCode = -100;
  80. $upload_succeed = false;
  81. break;
  82. }
  83. if ($upload_succeed) {
  84. if ($fileField['size']>$this->maxFileSize) {
  85. $errorMsg = '文件上传失败!失败原因:文件大小超出限制!';
  86. $errorCode = -103;
  87. $upload_succeed = false;
  88. }
  89. if ($upload_succeed) {
  90. $fileExt = FileSystem::fileExt($fileField['name']);
  91. if (!in_array(strtolower($fileExt),$this->allowFileTypes)) {
  92. $errorMsg = '文件上传失败!失败原因:文件类型不被允许!';
  93. $errorCode = -104;
  94. $upload_succeed = false;
  95. }
  96. }
  97. }
  98. if ($upload_succeed) {
  99. if (!is_dir($destFolder) && $destFolder!='./' && $destFolder!='../') {
  100. $dirname = '';
  101. $folders = explode('/',$destFolder);
  102. foreach ($folders as $folder) {
  103. $dirname .= $folder . '/';
  104. if ($folder!='' && $folder!='.' && $folder!='..' && !is_dir($dirname)) {
  105. mkdir($dirname);
  106. }
  107. }
  108. chmod($destFolder,0777);
  109. }
  110. switch ($fileNameType) {
  111. case 1:
  112. $fileName = date('YmdHis');
  113. $dot = '.';
  114. $fileFullName = $fileName . $dot . $fileExt;
  115. $i = 0;
  116. //判断是否有重名文件
  117. while (is_file($destFolder . $fileFullName)) {
  118. $fileFullName = $fileName . $i++ . $dot . $fileExt;
  119. }
  120. break;
  121. case 2:
  122. $fileFullName = date('YmdHis');
  123. $i = 0;
  124. //判断是否有重名文件
  125. while (is_file($destFolder . $fileFullName)) {
  126. $fileFullName = $fileFullName . $i++;
  127. }
  128. break;
  129. default:
  130. $fileFullName = $fileField['name'];
  131. break;
  132. }
  133. //die($destFolder . $fileFullName);
  134. $tempfile = str_replace('\\','\',$fileField['tmp_name']);
  135. //$files =
  136. if (move_uploaded_file($tempfile, $destFolder . $fileFullName)) {
  137. return $fileFullName;
  138. } else {
  139. $errorMsg = $destFolder.$fileFullName." 文件上传失败!失败原因:本地文件系统读写权限出错!";
  140. $errorCode = -105;
  141. $upload_succeed = false;
  142. }
  143. }
  144. if (!$upload_succeed) {
  145. throw new Exception($errorMsg,$errorCode);
  146. }
  147. }

人气教程排行