PHP多文件上传实例


Posted in PHP onJuly 09, 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 相关文章推荐
3种平台下安装php4经验点滴
Oct 09 PHP
PHP中对数据库操作的封装
Oct 09 PHP
php 图片加水印与上传图片加水印php类
May 12 PHP
PHP用SAX解析XML的实现代码与问题分析
Aug 22 PHP
php 获取本地IP代码
Jun 23 PHP
php实现的Timer页面运行时间监测类
Sep 24 PHP
PHP中addcslashes与stripcslashes函数用法分析
Jan 07 PHP
PHP引用的调用方法分析
Apr 25 PHP
PHP切割整数工具类似微信红包金额分配的思路详解
Sep 18 PHP
Laravel的Auth验证Token验证使用自定义Redis的例子
Sep 30 PHP
PHP常见的序列化与反序列化操作实例分析
Oct 28 PHP
PHP重载基础知识回顾
Sep 10 PHP
php判断linux下程序问题实例
Jul 09 #PHP
php实现html标签闭合检测与修复方法
Jul 09 #PHP
php可扩展的验证类实例(可对邮件、手机号、URL等验证)
Jul 09 #PHP
php类常量用法实例分析
Jul 09 #PHP
php求一个网段开始与结束IP地址的方法
Jul 09 #PHP
PHP实现全角字符转为半角方法汇总
Jul 09 #PHP
php将金额数字转化为中文大写
Jul 09 #PHP
You might like
PHP 魔术函数使用说明
2010/05/14 PHP
PHP Zip压缩 在线对文件进行压缩的函数
2010/05/26 PHP
MooTools 页面滚动浮动层智能定位实现代码
2011/08/23 Javascript
javascript模拟select,jselect的方法实现
2012/11/08 Javascript
原生javascript和jquery判断浏览器版本等信息
2013/07/04 Javascript
javascript间隔刷新的简单实例
2013/11/14 Javascript
JS往数组中添加项性能分析
2015/02/25 Javascript
浅谈jQuery中的事件
2015/03/23 Javascript
JavaScript数组对象赋值用法实例
2015/08/04 Javascript
AngularJS Module方法详解
2015/12/08 Javascript
AngularJS实现textarea记录只能输入规定数量的字符并显示
2016/04/26 Javascript
js 性能优化之算法和流程控制
2017/02/15 Javascript
Angular2使用Augury来调试Angular2程序
2017/05/21 Javascript
JavaScript设置名字输入不合法的实现方法
2017/05/23 Javascript
node.js多个异步过程中判断执行是否完成的解决方案
2017/12/10 Javascript
JavaScript中Object值合并方法详解
2017/12/22 Javascript
jquery实现搜索框功能实例详解
2018/07/23 jQuery
在vue中使用vue-echarts-v3的实例代码
2018/09/13 Javascript
Vue vm.$attrs使用场景详解
2020/03/08 Javascript
HTML+JS实现“代码雨”效果源码(黑客帝国文字下落效果)
2020/03/17 Javascript
vue单应用在ios系统中实现微信分享功能操作
2020/09/07 Javascript
python根据出生日期获得年龄的方法
2015/03/31 Python
​如何愉快地迁移到 Python 3
2019/04/28 Python
python制作填词游戏步骤详解
2019/05/05 Python
python matplotlib中的subplot函数使用详解
2020/01/19 Python
解决jupyter notebook打不开无反应 浏览器未启动的问题
2020/04/10 Python
属性与 @property 方法让你的python更高效
2020/09/21 Python
HTML5 video循环播放多个视频的方法步骤
2020/08/06 HTML / CSS
亚马逊意大利站点:Amazon.it
2020/12/31 全球购物
四年级评语大全
2014/04/21 职场文书
创文明城市标语
2014/06/16 职场文书
新农村建设标语
2014/06/24 职场文书
大国崛起观后感
2015/06/02 职场文书
2015年计算机教师工作总结
2015/07/22 职场文书
个人向公司借款协议书
2016/03/19 职场文书
pytorch--之halfTensor的使用详解
2021/05/24 Python