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的ASP防火墙
Oct 09 PHP
PHP 5.3新特性命名空间规则解析及高级功能
Mar 11 PHP
php cache类代码(php数据缓存类)
Apr 15 PHP
php 文件上传类代码
Aug 06 PHP
解析在PHP中使用mysqli扩展库对mysql的操作
Jul 03 PHP
PHP易混淆知识整理笔记
Sep 24 PHP
深入浅析php json 格式控制
Dec 24 PHP
给WordPress的编辑后台添加提示框的代码实例分享
Dec 25 PHP
优化WordPress中文章与评论的时间显示
Jan 12 PHP
PHP5.2中PDO的简单使用方法
Mar 25 PHP
基于Codeigniter框架实现的student信息系统站点动态发布功能详解
Mar 23 PHP
php两点地理坐标距离的计算方法
Dec 29 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
3.从实例开始
2006/10/09 PHP
php 静态化实现代码
2009/03/20 PHP
PHP使用fopen与file_get_contents读取文件实例分享
2016/03/04 PHP
PHP使用SWOOLE扩展实现定时同步 MySQL 数据
2017/04/09 PHP
PDO::getAvailableDrivers讲解
2019/01/28 PHP
关于JavaScript的gzip静态压缩方法
2007/01/05 Javascript
jquery 插件之仿“卓越亚马逊”首页弹出菜单效果
2008/12/25 Javascript
Dojo 学习要点
2010/09/03 Javascript
有趣的javascript数组定义方法
2010/09/10 Javascript
JS中的public和private对象,即static修饰符
2012/01/18 Javascript
同时使用n个window onload加载实例介绍
2013/04/25 Javascript
JS父页面与子页面相互传值方法
2014/03/05 Javascript
AngularJS模块管理问题的非常规处理方法
2015/04/29 Javascript
Javascript 普通函数和构造函数的区别
2016/11/05 Javascript
javaScript实现复选框全选反选事件详解
2020/11/20 Javascript
浅谈vue-router2路由参数注意的问题
2017/11/08 Javascript
vue使用Element组件时v-for循环里的表单项验证方法
2018/06/28 Javascript
angularjs实现对表单输入改变的监控(ng-change和watch两种方式)
2018/08/29 Javascript
vue指令v-html使用过滤器filters功能实例
2019/10/25 Javascript
python实现bucket排序算法实例分析
2015/05/04 Python
Django 使用Ajax进行前后台交互的示例讲解
2018/05/28 Python
详解python多线程之间的同步(一)
2019/04/03 Python
pytz格式化北京时间多出6分钟问题的解决方法
2019/06/21 Python
Python使用Matlab命令过程解析
2020/06/04 Python
Pytorch上下采样函数--interpolate用法
2020/07/07 Python
Python爬虫获取op.gg英雄联盟英雄对位胜率的源码
2021/01/29 Python
Pycharm制作搞怪弹窗的实现代码
2021/02/19 Python
Boda Skins皮衣官网:奢侈皮夹克,全球配送
2016/12/15 全球购物
iHerb中文官网:维生素、保健品和健康产品
2018/11/01 全球购物
总经理岗位职责
2013/11/09 职场文书
促销活动总结范文
2014/04/30 职场文书
大学专科自荐信
2014/06/17 职场文书
《微笑着面对生活》优秀演讲稿范文
2014/09/23 职场文书
县委常委班子对照检查材料思想汇报
2014/09/28 职场文书
电影小兵张嘎观后感
2015/06/03 职场文书
幼儿园托班开学寄语(2016春季)
2015/12/03 职场文书