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 前一天或后一天的日期
Jun 28 PHP
PHP操作数组的一些函数整理介绍
Jul 17 PHP
php购物车实现代码
Oct 10 PHP
PHP实现的简单mock json脚本分享
Feb 10 PHP
php实现的美国50个州选择列表实例
Apr 20 PHP
php生成4位数字验证码的实现代码
Nov 23 PHP
基于ThinkPHP5.0实现图片上传插件
Sep 25 PHP
在 Laravel 中 “规范” 的开发短信验证码发送功能
Oct 26 PHP
利用Homestead快速运行一个Laravel项目的方法详解
Nov 14 PHP
PHP abstract 抽象类定义与用法示例
May 29 PHP
解决Laravel 不能创建 migration 的问题
Oct 09 PHP
phpstorm激活码2020附使用详细教程
Sep 25 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
Adodb的十个实例(清晰版)
2006/12/31 PHP
PHP写MySQL数据 实现代码
2009/06/15 PHP
php 无极分类(递归)实现代码
2010/01/05 PHP
php采集时被封ip的解决方法
2010/08/29 PHP
PHP微信PC二维码登陆的实现思路
2017/07/13 PHP
php实现websocket实时消息推送
2018/03/30 PHP
IE8 下的Js错误HTML Parsing Error...
2009/08/14 Javascript
JavaScript实现按照指定长度为数字前面补零输出的方法
2015/03/19 Javascript
举例讲解AngularJS中的模块
2015/06/17 Javascript
浅谈jQuery中事情的动态绑定
2017/02/12 Javascript
JS实现的简单图片切换功能示例【测试可用】
2017/02/14 Javascript
详解vue与后端数据交互(ajax):vue-resource
2017/03/16 Javascript
angular2中Http请求原理与用法详解
2018/01/11 Javascript
webpack中的热刷新与热加载的区别
2018/04/09 Javascript
vue :src 文件路径错误问题的解决方法
2018/05/15 Javascript
vue2.0学习之axios的封装与vuex介绍
2018/05/28 Javascript
JavaScript中继承原理与用法实例入门
2020/05/09 Javascript
Vue中使用JsonView来展示Json树的实例代码
2020/11/16 Javascript
javascript实现滚轮轮播图片
2020/12/13 Javascript
python里对list中的整数求平均并排序
2014/09/12 Python
解决python报错MemoryError的问题
2018/06/26 Python
pandas去除重复列的实现方法
2019/01/29 Python
pytorch torch.nn.AdaptiveAvgPool2d()自适应平均池化函数详解
2020/01/03 Python
python给视频添加背景音乐并改变音量的具体方法
2020/07/19 Python
详解Python IO编程
2020/07/24 Python
英国泽西岛植物:Jersey Plants Direct
2019/08/07 全球购物
华为python面试题
2016/05/03 面试题
五一劳动节活动记录
2014/03/23 职场文书
幼儿园教研活动总结
2014/04/30 职场文书
责任心演讲稿
2014/05/14 职场文书
公司合并协议书范本
2014/09/30 职场文书
2014年银行客户经理工作总结
2014/11/12 职场文书
2015年教研员工作总结
2015/05/26 职场文书
Java数组与堆栈相关知识总结
2021/06/29 Java/Android
JUnit5常用注解的使用
2021/07/02 Java/Android
MySQL索引失效十种场景与优化方案
2023/05/08 MySQL