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 AJAX实例根据邮编自动完成地址信息
Nov 23 PHP
PHP number_format() 函数定义和用法
Jun 01 PHP
php 模拟post_验证页面的返回状态(实例讲解)
Oct 28 PHP
PHP中定义数组常量(array常量)的方法
Nov 17 PHP
php实现专业获取网站SEO信息类实例
Apr 02 PHP
phpMyAdmin无法登陆的解决方法
Apr 27 PHP
源码分析 Laravel 重复执行同一个队列任务的原因
Dec 25 PHP
PHP中非常有用却鲜有人知的函数集锦
Aug 17 PHP
PHP 多进程与信号中断实现多任务常驻内存管理实例方法
Oct 04 PHP
php设计模式之状态模式实例分析【星际争霸游戏案例】
Mar 26 PHP
phpquery中文手册
Mar 18 PHP
详解Laravel制作API接口
May 31 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
15种PHP Encoder的比较
2007/03/06 PHP
基于Linux调试工具strace与gdb的常用命令总结
2013/06/03 PHP
探讨:array2xml和xml2array以及xml与array的互相转化
2013/06/24 PHP
PHP模拟asp.net的StringBuilder类实现方法
2015/08/08 PHP
PHP+MySQL之Insert Into数据插入用法分析
2015/09/27 PHP
PHP实现表单提交时去除斜杠的方法
2016/12/26 PHP
php接口隔离原则实例分析
2019/11/11 PHP
jquery实现不包含当前项的选择器实例
2015/06/25 Javascript
jQuery的图片轮播插件PgwSlideshow使用详解
2016/08/11 Javascript
原生Javascript和jQuery做轮播图简单例子
2016/10/11 Javascript
js无提示关闭浏览器窗口的两种方法分析
2016/11/06 Javascript
JS字符串false转boolean的方法(推荐)
2017/03/08 Javascript
详解JS获取HTML DOM元素的8种方法
2017/06/17 Javascript
深入掌握 react的 setState的工作机制
2017/09/27 Javascript
关于vue中 $emit的用法详解
2018/04/12 Javascript
Nodejs实现微信分账的示例代码
2021/01/19 NodeJs
[01:29:31]VP VS VG Supermajor小组赛胜者组第二轮 BO3第一场 6.2
2018/06/03 DOTA
python批量修改文件名的实现代码
2014/09/01 Python
python根据给定文件返回文件名和扩展名的方法
2015/03/27 Python
简单介绍使用Python解析并修改XML文档的方法
2015/10/15 Python
读写json中文ASCII乱码问题的解决方法
2016/11/05 Python
详解Django中间件的5种自定义方法
2018/07/26 Python
Flask框架学习笔记之模板操作实例详解
2019/08/15 Python
Selenium使用Chrome模拟手机浏览器方法解析
2020/04/10 Python
h5调用摄像头的实现方法
2016/06/01 HTML / CSS
使用canvas生成含有微信头像的邀请海报没有微信头像问题
2019/10/29 HTML / CSS
医药工作岗位求职信分享
2013/12/31 职场文书
百度吧主申请感言
2014/01/12 职场文书
师德建设实施方案
2014/03/21 职场文书
银行竞聘上岗演讲稿
2014/09/12 职场文书
市场营销工作计划书
2014/09/15 职场文书
2014年最新个人对照检查材料范文
2014/09/25 职场文书
2015年幼儿园大班工作总结
2015/04/25 职场文书
python3 删除所有自定义变量的操作
2021/04/08 Python
【D4DJ】美少女DJ企划 动画将于明年冬季开播第2季
2022/04/11 日漫
mysql查找连续出现n次以上的数字
2022/05/11 MySQL