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 相关文章推荐
新版mysql+apache+php Linux安装指南
Oct 09 PHP
初学CAKEPHP 基础教程
Nov 02 PHP
逆序二维数组插入一元素的php代码
Jun 08 PHP
php并发对MYSQL造成压力的解决方法
Feb 21 PHP
PHP连接和操作MySQL数据库基础教程
Sep 29 PHP
PHP Imagick完美实现图片裁切、生成缩略图、添加水印
Feb 22 PHP
php打乱数组二维数组多维数组的简单实例
Jun 17 PHP
详解yii2实现分库分表的方案与思路
Feb 03 PHP
PHP手机号中间四位用星号*代替显示的实例
Jun 02 PHP
详解yii2使用多个数据库的案例
Jun 16 PHP
微信公众平台开发教程①获取用户Openid及个人信息图文详解
Apr 10 PHP
PHP7 新增功能
Mar 09 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
Windows2003 下 MySQL 数据库每天自动备份
2006/12/21 PHP
MooBox 基于Mootools的对话框插件
2012/01/20 Javascript
jquery表单验证使用插件formValidator
2012/11/10 Javascript
探讨JavaScript中声明全局变量三种方式的异同
2013/12/03 Javascript
jquery全选checkBox功能实现代码(取消全选功能)
2013/12/10 Javascript
JS实现很酷的EMAIL地址添加功能实例
2015/02/28 Javascript
input输入框鼠标焦点提示信息
2015/03/17 Javascript
jQuery UI库中dialog对话框功能使用全解析
2016/04/23 Javascript
带有定位当前位置的百度地图前端web api实例代码
2016/06/21 Javascript
快速解决js动态改变dom元素属性后页面及时渲染的问题
2016/07/06 Javascript
jquery插件锦集【推荐】
2016/12/16 Javascript
完美解决JS文件页面加载时的阻塞问题
2016/12/18 Javascript
JavaScript的继承实现小结
2017/05/07 Javascript
JS实现评价的星星功能
2017/08/20 Javascript
vue登录路由验证的实现
2017/12/13 Javascript
vue.js移动数组位置,同时更新视图的方法
2018/03/08 Javascript
vue.js或js实现中文A-Z排序的方法
2018/03/08 Javascript
Vue 实现从小到大的横向滑动效果详解
2019/10/16 Javascript
JS实现盒子拖拽效果
2020/02/06 Javascript
Vue实现Header渐隐渐现效果的实例代码
2020/11/05 Javascript
Pycharm学习教程(2) 代码风格
2017/05/02 Python
Python在groupby分组后提取指定位置记录方法
2018/04/20 Python
详解numpy的argmax的具体使用
2019/05/27 Python
解决python3 安装不了PIL的问题
2019/08/16 Python
opencv3/C++实现视频背景去除建模(BSM)
2019/12/11 Python
python中查看.db文件中表格的名字及表格中的字段操作
2020/07/07 Python
详解webapp页面滚动卡顿的解决办法
2018/12/26 HTML / CSS
英国虚拟主机服务商:eUKhost
2016/08/16 全球购物
外国语学院毕业生自荐信
2013/10/28 职场文书
《维生素c的故事》教学反思
2014/02/18 职场文书
《四季》教学反思
2014/04/08 职场文书
股东合作协议书
2014/04/14 职场文书
职务任命书范本
2014/06/05 职场文书
检讨书模板
2015/01/29 职场文书
荆州古城导游词
2015/02/06 职场文书
2015年上半年计生工作总结
2015/03/30 职场文书