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 相关文章推荐
PHPwind整合最土系统用户同步登录实现方法
Dec 08 PHP
php+ajax导入大数据时产生的问题处理
Jun 11 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十三)
Jun 26 PHP
PHP生成RSS文件类实例
Dec 05 PHP
php文件上传你必须知道的几点
Oct 20 PHP
Yii2简单实现多语言配置的方法
Jul 23 PHP
yii通过小物件生成view的方法
Oct 08 PHP
PHP下 Mongodb 连接远程数据库的实例代码
Aug 30 PHP
PHP7内核之Reference详解
Mar 14 PHP
Laravel 模型使用软删除-左连接查询-表起别名示例
Oct 24 PHP
PHP 扩展Memcached命令用法实例总结
Jun 04 PHP
PHP程序守护进程化实现方法详解
Jul 16 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随机显示指定文件夹下图片的方法
2015/07/13 PHP
php curl批处理实现可控并发异步操作示例
2018/05/09 PHP
Jquery 实现Tab效果 思路是js思路
2010/03/02 Javascript
js中的this关键字详解
2013/09/25 Javascript
JavaScript执行顺序详细介绍
2013/12/04 Javascript
JS完整获取IE浏览器信息包括类型、版本、语言等等
2014/05/22 Javascript
实例详解angularjs和ajax的结合使用
2015/10/22 Javascript
Bootstrap按钮下拉菜单组件详解
2016/05/10 Javascript
js传值后台中文出现乱码的解决方法
2016/06/30 Javascript
react 父组件与子组件之间的值传递的方法
2017/09/14 Javascript
vue组件间通信子与父详解(二)
2017/11/07 Javascript
jQuery的Ajax接收java返回数据方法
2018/08/11 jQuery
微信小程序出现wx.getLocation再次授权问题的解决方法分析
2019/01/16 Javascript
JavaScript变量作用域及内存问题实例分析
2019/06/10 Javascript
vue cli3.0打包上线静态资源找不到路径的解决操作
2020/08/03 Javascript
JS实现炫酷雪花飘落效果
2020/08/19 Javascript
使用Mock.js生成前端测试数据
2020/12/13 Javascript
Python字符串格式化的方法(两种)
2017/09/19 Python
python opencv判断图像是否为空的实例
2019/01/26 Python
python实现整数的二进制循环移位
2019/03/08 Python
我们为什么要减少Python中循环的使用
2019/07/10 Python
Flask框架模板渲染操作简单示例
2019/07/31 Python
python 实现快速生成连续、随机字母列表
2019/11/28 Python
详解Django ORM引发的数据库N+1性能问题
2020/10/12 Python
HTML5中input输入框默认提示文字向左向右移动的示例代码
2020/09/10 HTML / CSS
ECCO爱步官方旗舰店:丹麦鞋履品牌
2018/01/02 全球购物
罗兰·穆雷官网:Roland Mouret
2018/09/28 全球购物
毕业生个人求职信范例分享
2013/12/17 职场文书
婚内房产协议书范本
2014/10/02 职场文书
2014年图书馆工作总结
2014/11/25 职场文书
先进单位事迹材料
2014/12/25 职场文书
如何用 Python 子进程关闭 Excel 自动化中的弹窗
2021/05/07 Python
Python编写可视化界面的全过程(Python+PyCharm+PyQt)
2021/05/17 Python
nginx中proxy_pass各种用法详解
2021/11/07 Servers
python程序的组织结构详解
2021/12/06 Python
MySQL索引失效场景及解决方案
2022/07/23 MySQL