PHP中怎么封装一个多文件上传类
创始人
2024-12-09 04:20:22
0次

具体如下:

user_post_file = $file;
 $this->save_file_path = $path;
 $this->max_file_size = $size; //如果用户不填写文件大小,则默认为2M.
 if ($type != '')
  $this->allow_type = $type;
 }
 /**//**
 * 存储用户上传文件,检验合法性通过后,存储至指定位置。
 * @access public
 * @return int  值为0时上传失败,非0表示上传成功的个数。
 */
 function upload() {
 for ($i = 0; $i < count($this->user_post_file['name']); $i++) {
  //如果当前文件上传功能,则执行下一步。
  if ($this->user_post_file['error'][$i] == 0) {
  //取当前文件名、临时文件名、大小、扩展名,后面将用到。
  $name = $this->user_post_file['name'][$i];
  $tmpname = $this->user_post_file['tmp_name'][$i];
  $size = $this->user_post_file['size'][$i];
  $mime_type = $this->user_post_file['type'][$i];
  $type = $this->getFileExt($this->user_post_file['name'][$i]);
  //检测当前上传文件大小是否合法。
  if (!$this->checkSize($size)) {
   $this->last_error = "The file size is too big. File name is: ".$name;
   $this->halt($this->last_error);
   continue;
  }
  //检测当前上传文件扩展名是否合法。
  if (!$this->checkType($type)) {
   $this->last_error = "Unallowable file type: .".$type." File name is: ".$name;
   $this->halt($this->last_error);
   continue;
  }
  //检测当前上传文件是否非法提交。
  if(!is_uploaded_file($tmpname)) {
   $this->last_error = "Invalid post file method. File name is: ".$name;
   $this->halt($this->last_error);
   continue;
  }
  //移动文件后,重命名文件用。
  $basename = $this->getBaseName($name, ".".$type);
  //移动后的文件名
  $saveas = $basename."-".time().".".$type;
  //组合新文件名再存到指定目录下,格式:存储路径 + 文件名 + 时间 + 扩展名
  $this->final_file_path = $this->save_file_path."/".$saveas;
  if(!move_uploaded_file($tmpname, $this->final_file_path)) {
   $this->last_error = $this->user_post_file['error'][$i];
   $this->halt($this->last_error);
   continue;
  }
  //存储当前文件的有关信息,以便其它程序调用。
  $this->save_info[] = array("name" => $name, "type" => $type,
      "mime_type" => $mime_type,
               "size" => $size, "saveas" => $saveas,
               "path" => $this->final_file_path);
  }
 }
 return count($this->save_info); //返回上传成功的文件数目
 }
 /**//**
 * 返回一些有用的信息,以便用于其它地方。
 * @access public
 * @return Array 返回最终保存的路径
 */
 function getSaveInfo() {
 return $this->save_info;
 }
 /**//**
 * 检测用户提交文件大小是否合法
 * @param Integer $size 用户上传文件的大小
 * @access private
 * @return boolean 如果为true说明大小合法,反之不合法
 */
 function checkSize($size) {
 if ($size > $this->max_file_size) {
  return false;
 }
 else {
  return true;
 }
 }
 /**//**
 * 检测用户提交文件类型是否合法
 * @access private
 * @return boolean 如果为true说明类型合法,反之不合法
 */
 function checkType($extension) {
 foreach ($this->allow_type as $type) {
  if (strcasecmp($extension , $type) == 0)
  return true;
 }
 return false;
 }
 /**//**
 * 显示出错信息
 * @param $msg  要显示的出错信息
 * @access private
 */
 function halt($msg) {
 printf(" %s 
\n", $msg);  }  /**//**  * 取文件扩展名  * @param String $filename 给定要取扩展名的文件  * @access private  * @return String   返回给定文件扩展名  */  function getFileExt($filename) {  $stuff = pathinfo($filename);  return $stuff['extension'];  }  /**//**  * 取给定文件文件名,不包括扩展名。  * eg: getBaseName("j:/hexuzhong.jpg"); //返回 hexuzhong  *  * @param String $filename 给定要取文件名的文件  * @access private  * @return String 返回文件名  */  function getBaseName($filename, $type) {  $basename = basename($filename, $type);  return $basename;  } } /**//******************** UploadFile类使用注释 //注意,上传组件name属性不管是一个还是多个都要使用数组形式,如: //如果用户点击了上传按钮。 if ($_POST['action'] == "上传") {  //设置允许用户上传的文件类型。  $type = array('gif', 'jpg', 'png', 'zip', 'rar');  //实例化上传类,第一个参数为用户上传的文件组、第二个参数为存储路径、  //第三个参数为文件最大大小。如果不填则默认为2M  //第四个参数为充许用户上传的类型数组。如果不填则默认为gif, jpg, png, zip, rar, txt, doc, pdf  $upload = new UploadFile($_FILES['user_upload_file'], 'j:/tmp', 100000, $type);  //上传用户文件,返回int值,为上传成功的文件个数。  $num = $upload->upload();  if ($num != 0) {  echo "上传成功
";  //取得文件的有关信息,文件名、类型、大小、路径。用print_r()打印出来。  print_r($upload->getSaveInfo());  //格式为: Array  //  (  //  [0] => Array(  //    [name] => example.txt  //    [type] => txt  //    [size] => 526  //    [path] => j:/tmp/example-1108898806.txt  //    )  //  )  echo $num."个文件上传成功";  }  else {  echo "上传失败
";  } } */ ?>

相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...