PHP实现多文件上传的方法


Posted in PHP onJuly 08, 2015

本文实例讲述了PHP实现多文件上传的方法。分享给大家供大家参考。具体实现方法如下:

<?php
define('ROOT','D:/Program Files/www/test/');
class Files_Tool{
 protected static $allowExt=array('.jpg','.jpeg','.png','.gif','.bmp','.svg','.chm','.pdf','.zip','.rar','.tar','.gz','.bzip2','.ppt','.doc');
 public static $wrong=array();
 public static $path=array();
 protected static $error=array(
  0=>'文件上传失败,没有错误发生,文件上传成功',
  1=>'文件上传失败,上传的文件超过了 php.ini中upload_max_filesize 选项限制的值',
  2=>'文件上传失败,上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值',
  3=>'文件上传失败,文件只有部分被上传',
  4=>'文件上传失败,没有文件被上传',
  5=>'文件上传失败,未允许的后缀',
  6=>'文件上传失败,找不到临时文件夹.PHP 4.3.10 和 PHP 5.0.3 引进',
  7=>'文件上传失败,文件写入失败.PHP 5.1.0 引进',
  8=>'文件上传失败,未接收到表单域的NAME',
  9=>'文件上传失败,,错误未知'
 );
  public static function upload($name){
   //检测是否接收到表单域的NAME
   if(!isset($_FILES[$name])){
    self::$wrong[]=8;
    return false;
   }
   //3维数组简化成2维数组
   $files=array_shift($_FILES);
   //获取后缀
   $files=self::get_Ext($files);
   //处理文件次数
   $n=count($files['name']);
   for($i=0;$i<$n;$i++){
    //查看当前文件是否有错误信息,有则跳过当前文件,处理下个文件
    if($files['error'][$i]!=0){        
    self::$wrong[$i+1]=$files['error'][$i];
    continue;
    }
    //查看当前文件的后缀,是否允许,如果不允许,跳过当前文件
    if(!in_array($files['name'][$i],self::$allowExt)){
     self::$wrong[$i+1]=5;
     continue;
    }
    //路径
    $dir=self::time_Dir();
    //文件名
    $name=self::rand_Name();
    //后缀
    $ext=$files['name'][$i];
    //文件位置
    $path=$dir.$name.$ext;
    //移动临时文件,如果失败,跳过当前文件
    if(!move_uploaded_file($files['tmp_name'][$i],$path)){
    self::$wrong[$i]=9;
    continue;
    }
    //存入路径
    self::$path[$i+1]=strtr($path,array(ROOT=>''));
   }
   return self::$path;
  }
  //获取后缀的方法
  protected static function get_Ext($arr){
    if(!is_array($arr) || !isset($arr['name'])){return false;}
    foreach($arr['name'] as $k=>$v){
    $arr['name'][$k]=strtolower(strrchr($v,'.'));
    }
    return $arr;
  }
  //以日期生成路径
  protected static function time_Dir(){
   $dir=ROOT.'Data/images/'.date('Y/m/d/',time());
   if(!is_dir($dir)){
    mkdir($dir,0777,true);
   }
   return $dir;
  }
  //生成随机文件名
  protected static function rand_Name(){
   $str=str_shuffle('1234567890qwertyuiopasdfghjklzxcvbnm');
   $str=substr($str,0,6);
   return $str;
  }
  //错误接口
  public static function errors(){
   foreach(self::$wrong as $k=>$v){
    self::$wrong[$k]='第'.$k.'个'.self::$error[$k];
  }
  return self::$wrong;
  }
}

希望本文所述对大家的php程序设计有所帮助。

PHP 相关文章推荐
PHP isset()与empty()的使用区别详解
Aug 29 PHP
php 文件上传实例代码
Apr 19 PHP
解析thinkphp中的M()与D()方法的区别
Jun 22 PHP
php中\r \r\n \t的区别示例介绍
Feb 08 PHP
php提示Warning:mysql_fetch_array() expects的解决方法
Dec 16 PHP
PHP中使用imagick实现把PDF转成图片
Jan 26 PHP
优化WordPress的Google字体以加速国内服务器上的运行
Nov 24 PHP
PHP中模拟链表和链表的基本操作示例
Feb 27 PHP
php中的单引号、双引号和转义字符详解
Feb 16 PHP
PHP基于Closure类创建匿名函数的方法详解
Aug 17 PHP
Laravel 5.4.36中session没有保存成功问题的解决
Feb 19 PHP
PHP设计模式(九)外观模式Facade实例详解【结构型】
May 02 PHP
PHP实现图片自动清理的方法
Jul 08 #PHP
php-redis中的sort排序函数总结
Jul 08 #PHP
PHP通过串口实现发送短信
Jul 08 #PHP
PHP使用CURL模拟登录的方法
Jul 08 #PHP
一个PHP实现的轻量级简单爬虫
Jul 08 #PHP
PHP设置进度条的方法
Jul 08 #PHP
smarty内部日期函数html_select_date()用法实例分析
Jul 08 #PHP
You might like
ajax实现无刷新分页(php)
2010/07/18 PHP
curl不使用文件存取cookie php使用curl获取cookie示例
2014/01/26 PHP
php访问数组最后一个元素的函数end()用法
2015/03/18 PHP
php接口实现拖拽排序功能
2018/04/23 PHP
ajaxControlToolkit AutoCompleteExtender的用法
2008/10/30 Javascript
jquery pagination插件实现无刷新分页代码
2009/10/13 Javascript
基于jquery的代码显示区域自动拉长效果
2011/12/07 Javascript
JS 修改URL参数(实现代码)
2013/07/08 Javascript
ie中js创建checkbox默认选中问题探讨
2013/10/21 Javascript
jquery实现图片随机排列的方法
2015/05/04 Javascript
详细解读JavaScript的跨浏览器事件处理
2015/08/12 Javascript
JavaScript资源预加载组件和滑屏组件的使用推荐
2016/03/10 Javascript
限制文本框只能输入数字||只能是数字和小数点||只能是整数和浮点数
2016/05/27 Javascript
JavaScript字符串_动力节点Java学院整理
2017/06/27 Javascript
JS小球抛物线轨迹运动的两种实现方法详解
2017/12/20 Javascript
网页爬虫之cookie自动获取及过期自动更新的实现方法
2018/03/06 Javascript
vue 路由meta 设置导航隐藏与显示功能的示例代码
2020/09/04 Javascript
[37:47]IG vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
用Python实现一个简单的线程池
2015/04/07 Python
python实现手机通讯录搜索功能
2018/02/22 Python
Python实现找出数组中第2大数字的方法示例
2018/03/26 Python
Python实现合并同一个文件夹下所有txt文件的方法示例
2018/04/26 Python
python基于K-means聚类算法的图像分割
2019/10/30 Python
Django框架之中间件MiddleWare的实现
2019/12/30 Python
Python lambda表达式原理及用法解析
2020/08/18 Python
python爬虫爬取图片的简单代码
2021/01/18 Python
Java中的基本数据类型所占存储空间大小固定的吗
2012/02/15 面试题
艺术设计专业个人求职信
2014/04/10 职场文书
大专学生求职信
2014/07/04 职场文书
法人单位授权委托书范文
2014/10/06 职场文书
公司车队管理制度
2015/08/04 职场文书
新年祝酒词大全
2015/08/11 职场文书
优秀共产党员主要事迹材料
2015/11/05 职场文书
SQLServer2019 数据库的基本使用之图形化界面操作的实现
2021/04/08 SQL Server
Innodb存储引擎中的后台线程详解
2022/04/03 MySQL
JS实现简单的九宫格抽奖
2022/06/28 Javascript