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 相关文章推荐
基于php实现长连接的方法与注意事项的问题
May 10 PHP
比较strtr, str_replace和preg_replace三个函数的效率
Jun 26 PHP
PHP Curl出现403错误的解决办法
May 29 PHP
详解WordPress开发中的get_post与get_posts函数使用
Jan 04 PHP
smarty的section嵌套循环用法示例
May 28 PHP
PHP中字符与字节的区别及字符串与字节转换示例
Oct 15 PHP
PHP 获取指定地区的天气实例代码
Feb 08 PHP
详解php中的implements 使用
Jun 13 PHP
thinkphp5实现无限级分类
Feb 18 PHP
Laravel 前端资源配置教程
Oct 18 PHP
php 多继承的几种常见实现方法示例
Nov 18 PHP
PHP手机号码及邮箱正则表达式实例解析
Jul 11 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正则匹配中英文、数字及下划线的方法【用户名验证】
2017/08/01 PHP
PHP实现获取毫秒时间戳的方法【使用microtime()函数】
2019/03/01 PHP
js类中获取外部函数名的方法
2007/08/19 Javascript
mysql输出数据赋给js变量报unterminated string literal错误原因
2010/05/22 Javascript
javascript中检测变量的类型的代码
2010/12/28 Javascript
JQuery中的事件及动画用法实例
2015/01/26 Javascript
JavaScript改变CSS样式的方法汇总
2015/05/07 Javascript
JavaScript设计模式之单例模式详解
2017/06/09 Javascript
Angularjs的启动过程分析
2017/07/18 Javascript
微信小程序开发之tabbar图标和颜色的实现
2018/10/17 Javascript
JS实现checkbox互斥(单选)功能示例
2019/05/04 Javascript
Vue实现圆环进度条的示例
2021/02/06 Vue.js
[02:34]DOTA2英雄基础教程 幽鬼
2014/01/02 DOTA
Pycharm学习教程(6) Pycharm作为Vim编辑器使用
2017/05/03 Python
Python正则表达式非贪婪、多行匹配功能示例
2017/08/08 Python
Python 爬取携程所有机票的实例代码
2018/06/11 Python
Python反射和内置方法重写操作详解
2018/08/27 Python
pip指定python位置安装软件包的方法
2019/07/12 Python
python将字符串list写入excel和txt的实例
2019/07/20 Python
Python 类的私有属性和私有方法实例分析
2019/09/29 Python
如何分离django中的媒体、静态文件和网页
2019/11/12 Python
使用OpenCV-python3实现滑动条更新图像的Canny边缘检测功能
2019/12/12 Python
Django模板标签{% for %}循环,获取制定条数据实例
2020/05/14 Python
班组长安全职责
2014/01/05 职场文书
展会邀请函范文
2014/01/26 职场文书
《晏子使楚》教学反思
2014/02/08 职场文书
机电一体化求职信
2014/03/10 职场文书
《有趣的发现》教学反思
2014/04/15 职场文书
生物技术专业求职信
2014/06/10 职场文书
小学语文教师年度考核个人总结
2015/02/05 职场文书
义诊活动通知
2015/04/24 职场文书
铁人纪念馆观后感
2015/06/16 职场文书
五一放假通知怎么写
2015/08/18 职场文书
小学数学继续教育研修日志
2015/11/13 职场文书
springboot+VUE实现登录注册
2021/05/27 Vue.js
Window server中安装Redis的超详细教程
2021/11/17 Redis