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 在线翻译函数代码
May 07 PHP
php 显示指定路径下的图片
Oct 29 PHP
PHP 程序员的调试技术小结
Nov 15 PHP
PHP 杂谈《重构-改善既有代码的设计》之三 重新组织数据
Apr 09 PHP
PHP反射机制用法实例
Aug 28 PHP
PHP生成不重复标识符的方法
Nov 21 PHP
PHP生成随机字符串(3种方法)
Sep 25 PHP
PHP简单实现欧拉函数Euler功能示例
Nov 06 PHP
Laravel 创建可以传递参数 Console服务的例子
Oct 14 PHP
Laravel 6.2 中添加了可调用容器对象的方法
Oct 22 PHP
PHP SESSION跨页面传递失败解决方案
Dec 11 PHP
解析laravel使用workerman用户交互、服务器交互
Apr 28 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
PHP的范围解析操作符(::)的含义分析说明
2011/07/03 PHP
深入解析php中的foreach函数
2013/08/31 PHP
本地计算机无法启动Apache故障处理
2014/08/08 PHP
php字符串截取函数用法分析
2014/11/25 PHP
Zend Framework路由器用法实例详解
2016/12/11 PHP
动态添加js事件实现代码
2009/03/12 Javascript
jValidate 基于jQuery的表单验证插件
2009/12/12 Javascript
js输出阴历、阳历、年份、月份、周示例代码
2014/01/29 Javascript
js中函数调用的两种常用方法使用介绍
2014/07/17 Javascript
直接在JS里创建JSON数据然后遍历使用
2014/07/25 Javascript
jQuery中prev()方法用法实例
2015/01/08 Javascript
Javascript核心读书有感之语言核心
2015/02/01 Javascript
javascript中caller和callee详解
2015/08/10 Javascript
jquery实现可自动收缩的TAB网页选项卡代码
2015/09/06 Javascript
将JavaScript的jQuery库中表单转化为JSON对象的方法
2015/11/17 Javascript
微信小程序中form 表单提交和取值实例详解
2017/04/20 Javascript
详解vue slot插槽的使用方法
2017/06/13 Javascript
Webpack打包css后z-index被重新计算的解决方法
2017/06/18 Javascript
Bootstrap实现下拉菜单多级联动
2017/11/23 Javascript
微信小程序实现星级评分和展示
2018/07/05 Javascript
详解新手使用vue-router传参时注意事项
2019/06/06 Javascript
JavaScript实现模态对话框实例
2020/01/13 Javascript
element跨分页操作选择详解
2020/06/29 Javascript
python程序封装为win32服务的方法
2021/03/07 Python
详解Django-auth-ldap 配置方法
2018/12/10 Python
使用python的pandas为你的股票绘制趋势图
2019/06/26 Python
postman模拟访问具有Session的post请求方法
2019/07/15 Python
利用python实现PSO算法优化二元函数
2019/11/13 Python
在Python中预先初始化列表内容和长度的实现
2019/11/28 Python
如何利用python正则表达式匹配版本信息
2020/12/09 Python
HTML5实现移动端复制功能
2018/04/19 HTML / CSS
台湾时尚彩瞳专门店:imeime
2019/08/16 全球购物
父亲追悼会答谢词
2014/01/17 职场文书
企业法人代表任命书
2014/06/06 职场文书
高中生军训感言
2015/08/01 职场文书
银行岗位培训心得体会
2016/01/09 职场文书