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 syntax error, unexpected $end 错误的一种原因及解决
Oct 25 PHP
Php获取金书网的书名的实现代码
Jun 11 PHP
ThinkPHP中实例Model方法的区别说明
Aug 21 PHP
php学习之变量的使用
May 29 PHP
php结合表单实现一些简单功能的例子
Jun 04 PHP
thinkphp中ajax与php响应过程详解
Dec 08 PHP
PHP安全上传图片的方法
Mar 21 PHP
thinkphp项目部署到Linux服务器上报错“模板不存在”如何解决
Apr 27 PHP
Laravel中基于Artisan View扩展包创建及删除应用视图文件的方法
Oct 08 PHP
基于php中echo用逗号和用点号的区别详解
Jan 23 PHP
PHP实现数组根据某个单元字段排序操作示例
Aug 01 PHP
laravel框架中路由设置,路由参数和路由命名实例分析
Nov 23 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
谏山创故乡大分县日田市水坝将设立《进击的巨人》立艾伦、三笠以及阿尔敏的铜像!
2020/03/06 日漫
简单谈谈php延迟静态绑定
2016/01/26 PHP
理解Javascript_07_理解instanceof实现原理
2010/10/15 Javascript
javascript中call,apply,bind的用法对比分析
2015/02/12 Javascript
jQuery实现给页面换肤的方法
2015/05/30 Javascript
基于jQuery实现中英文切换导航条效果
2016/09/18 Javascript
Bootstrap基本模板的使用和理解1
2016/12/14 Javascript
浅析BootStrap中Modal(模态框)使用心得
2016/12/24 Javascript
微信小程序 数据交互与渲染实例详解
2017/01/21 Javascript
用jQuery实现圆点图片轮播效果
2017/03/19 Javascript
Bootstrap模态框插件使用详解
2017/05/11 Javascript
vue基于mint-ui的城市选择3级联动的示例
2017/10/25 Javascript
node vue项目开发之前后端分离实战记录
2017/12/13 Javascript
p5.js入门教程之平滑过渡(Easing)
2018/03/16 Javascript
JavaScript数组,JSON对象实现动态添加、修改、删除功能示例
2018/05/26 Javascript
vue2.0$nextTick监听数据渲染完成之后的回调函数方法
2018/09/11 Javascript
vue从零实现一个消息通知组件的方法详解
2020/03/16 Javascript
react的hooks的用法详解
2020/10/12 Javascript
[42:04]DOTA2上海特级锦标赛主赛事日 - 2 胜者组第一轮#3Secret VS OG第一局
2016/03/03 DOTA
[01:33]DOTA2上海特级锦标赛 LIQUID战队完整宣传片
2016/03/16 DOTA
使用python实现递归版汉诺塔示例(汉诺塔递归算法)
2014/04/08 Python
星球大战与Python之间的那些事
2016/01/07 Python
Python cookbook(数据结构与算法)在字典中将键映射到多个值上的方法
2018/02/18 Python
Django集成搜索引擎Elasticserach的方法示例
2019/06/04 Python
keras实现基于孪生网络的图片相似度计算方式
2020/06/11 Python
2020版Python学习路线图(附学习资料)
2020/09/15 Python
python 实现波浪滤镜特效
2020/12/02 Python
html5使用canvas绘制一张图片
2014/12/15 HTML / CSS
快速实现一个简单的canvas迷宫游戏的示例
2018/07/04 HTML / CSS
美国领先的医疗警报服务:Philips Lifeline
2018/03/12 全球购物
法院实习人员自我鉴定
2013/09/26 职场文书
2013年学期结束动员演讲稿
2014/01/07 职场文书
DIY手工制作经营店创业计划书
2014/02/01 职场文书
大学新闻系应届生求职信
2014/06/02 职场文书
太空授课观后感
2015/06/17 职场文书
话题作文之关于呼唤
2019/11/29 职场文书