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实现Ftp用户的在线管理的代码
Mar 06 PHP
PHP 源代码压缩小工具
Dec 22 PHP
php一个找二层目录的小东东
Aug 02 PHP
destoon实现资讯信息前面调用它所属分类的方法
Jul 15 PHP
PHP判断文章里是否有图片的简单方法
Jul 26 PHP
PHP利用APC模块实现文件上传进度条的方法
Jan 26 PHP
php数组转成json格式的方法
Mar 09 PHP
PHP实现清除wordpress里恶意代码
Oct 21 PHP
简单谈谈PHP中strlen 函数
Feb 27 PHP
PHP内置加密函数详解
Nov 20 PHP
Yii2.0实现生成二维码功能实例
Oct 24 PHP
PHP日志LOG类定义与用法示例
Sep 06 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写的serv-u的web申请账号的程序
2006/10/09 PHP
php addslashes 利用递归实现使用反斜线引用字符串
2013/08/05 PHP
PHP导航下拉菜单的实现如此简单
2013/09/22 PHP
PHP实现检测客户端是否使用代理服务器及其匿名级别
2015/01/07 PHP
phpMyAdmin安装并配置允许空密码登录
2015/07/04 PHP
PHP实现递归无限级分类
2015/10/22 PHP
Javascript 两个窗体之间传值实现代码
2009/09/25 Javascript
jquery 可拖拽的窗体控件实现代码
2010/03/21 Javascript
jQuery解决下拉框select设宽度时IE 6/7/8下option超出显示不全
2013/05/27 Javascript
表单序列化与jq中的serialize使用示例
2014/02/21 Javascript
详解jQuery向动态生成的内容添加事件响应jQuery live()方法
2015/11/02 Javascript
JS之相等操作符详解
2016/09/13 Javascript
JavaScript基础——使用Canvas绘图
2016/11/02 Javascript
详解JavaScript中的属性和特性
2016/12/08 Javascript
Vue自定义toast组件的实例代码
2018/08/15 Javascript
js中forEach,for in,for of循环的用法示例小结
2020/03/14 Javascript
详解微信小程序入门从这里出发(登录注册、开发工具、文件及结构介绍)
2020/07/21 Javascript
[36:13]Mineski vs iG 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
[01:10]为家乡而战!完美世界城市挑战赛全国总决赛花絮
2019/07/25 DOTA
[41:12]Liquid vs Secret 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.24
2019/09/10 DOTA
详解Python2.x中对Unicode编码的使用
2015/04/03 Python
Python对数据库操作
2016/03/28 Python
Python类的继承用法示例
2019/01/31 Python
对python中的os.getpid()和os.fork()函数详解
2019/08/08 Python
python3的url编码和解码,自定义gbk、utf-8的例子
2019/08/22 Python
Python中生成ndarray实例讲解
2021/02/22 Python
深入理解css属性的选择对动画性能的影响
2016/04/20 HTML / CSS
Theory美国官网:后现代都市风时装品牌
2018/05/09 全球购物
技术总监的工作职责
2013/11/13 职场文书
3.12植树节活动总结2014
2014/03/13 职场文书
小学学校门卫岗位职责
2014/08/03 职场文书
学生吸烟检讨书
2014/09/14 职场文书
2015年党日活动总结范文
2015/03/25 职场文书
2015年毕业生实习评语
2015/03/25 职场文书
运动会加油稿50字
2015/07/21 职场文书
Pytorch可视化的几种实现方法
2021/06/10 Python