101)PHP,多文件上传
就是在之前的单文件上传的基础上加了一个函数:

<?php
/**
* 上传函数
* @param $tmp_file $_FILES的五个信息,比如upload($_FILES('mingzi')
* $_FILES里面的名字是你的对应的html代码中的上传文件的那个name
* @return bool 失败返回false,成功就是true
*/
$tmp_file=$_FILES['picture'];
function upload($tmp_file){ /**
* 是否存在错误
*/ if($tmp_file['error']!=){
echo '文件上传错误';
return false;
}
/**
* 尺寸,
* 这个函数自己定的,但是应该是初始化设定的,就是这个值是变化的,不是一个固定的值。
*/ $max_size=*;//自己设定的最大尺寸
if($tmp_file['size']>$max_size){
echo "文件过大";
return false;
}
/**
* 验证后缀名,
* 用验证后缀和MIME方法
*/
//首先是验证后缀名
$tmp_file_zhui=strrchr($tmp_file['name'],'.') ;
//strrchr函数是来剪切字符串的最后出现.的包括这个.后面的全部截取
//后缀的映射数组,其实就是那个满足条件的后缀表(用关联数组表示)
$tmp_file_zhui_list=array(
'.png','.gif','.jpeg','.jpg'
);
if(!in_array($tmp_file_zhui,$tmp_file_zhui_list)){
echo "文件格式有问题";
return false;
}
//就是那个$_FILES['type']有一个格式,下面的是对应那个映射表
$tmp_file_zhui_MIMElist=array(
'.png'=>array('image/png','image/x-png'),
'.jpg'=>array('image/jpeg','image/x-pjpeg'),
'.jpeg'=>array('image/jpeg','image/pjpeg'),
'.gif'=>array('image/gif'),
);
$old_list=array();//下面直接用$old_list不行,我觉得这个就是声明,这是自己加的
//得出真正的映射表,因为在我的后缀映射表中,可能不是这四个,一旦发生改动,我的下面的映射关系,我还得自己改,所以,我就用一个foreach,上面有什么后缀,我的下面就给他对应上什么$_FILE['type']格式,然后得到我要的MIME映射表
foreach ($tmp_file_zhui_list as $value){
foreach($tmp_file_zhui_MIMElist[$value] as $key=>$item){
// var_dump($tmp_file_zhui_MIMElist[$value][$key]);
$new_MIME_list=array_merge($old_list,(array)$tmp_file_zhui_MIMElist[$value][$key]);
$old_list=$new_MIME_list;
} }
//去重
$new_MIME_list=array_unique($new_MIME_list); //然后用MIME验证
$phpfinfo=new finfo(FILEINFO_MIME_TYPE);
$f_type=$phpfinfo->file($tmp_file['tmp_name']);
echo $f_type;
if(!in_array($f_type,$new_MIME_list)){
echo "文件格式有误";
return false;
}
//后缀验证完成。
//建立一个文件夹,来存我的临时文件
if(!is_dir('./wangchao')){
mkdir('./wangchao');
} $sub_dir_name=date('Y--m-d-H');//截取年月日小时
//unipid是产生一个随机名字,可以试验一下 echo uniqid();
move_uploaded_file($tmp_file['tmp_name'],'./wangchao/'.uniqid('wang_'.$sub_dir_name.'_').$tmp_file_zhui);
return true;
}
upload($tmp_file); /*
基本上的步骤就是:
①看$_FILES['error']是否爆出错误
②看文件的大小
③看文件的格式,分为后缀和MIME验证
④创建一个文件夹来存取临时上传文件
⑤返回结果 */
function uploadsome($tmp_files){
foreach($tmp_files as $key=>$value){
$tmp_file['name']=$tmp_files['name'][$key];
$tmp_file['type']=$tmp_files['type'][$key];
$tmp_file['tmp_name']=$tmp_files['tmp_name'][$key];
$tmp_file['error']=$tmp_files['error'][$key];
$tmp_file['size']=$tmp_files['size'][$key];
upload($tmp_file);
}
}
多文件上传的样子:


101)PHP,多文件上传的更多相关文章
- java web学习总结(二十四) -------------------Servlet文件上传和下载的实现
在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用 ...
- [转]ExtJs入门之filefield:文件上传的配置+结合Ajax完美实现文件上传的asp.net示例
原文地址:http://www.stepday.com/topic/?459 作文一个ExtJs的入门汉子,学习起来的确是比较费劲的事情,不过如今在这样一个网络资源如此丰富的时代,依然不是那么难了的. ...
- (转载)JavaWeb学习总结(五十)——文件上传和下载
源地址:http://www.cnblogs.com/xdp-gacl/p/4200090.html 在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传 ...
- SpringMVC 文件上传&拦截器&异常处理
文件上传 Spring MVC 为文件上传提供了直接的支持,这种支持是通过即插即用的 MultipartResolver 实现的.Spring 用 Jakarta Commons FileUpload ...
- JavaWeb学习总结,文件上传和下载
在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用 ...
- [转]一个文件上传的jquery插件
http://www.jb51.net/article/51547.htm 这篇文章主要介绍了使用ajaxfileupload.js实现ajax上传文件php版,需要的朋友可以参考下 无论是P ...
- SharePoint 2010 ——自定义上传页面与多文件上传解决方案
最近项目遇到一个很麻烦的问题,原以为很容易解决,结果搞了那么久,先开个头,再慢慢写 SharePoint 2010 ——自定义上传页面与多文件上传解决方案 1.创建Sharepoint空白项目,创建应 ...
- JavaWeb实现文件上传下载功能实例解析
转:http://www.cnblogs.com/xdp-gacl/p/4200090.html JavaWeb实现文件上传下载功能实例解析 在Web应用系统开发中,文件上传和下载功能是非常常用的功能 ...
- android和struts2实现android文件上传
1.开发准备如下2个工具类 package org.lxh.util; import java.io.BufferedReader; import java.io.InputStreamReader; ...
随机推荐
- C语言笔记 15_标准库&locale&math&setjmp&signal&stdarg&stddef
<locale.h> 简介 locale.h 头文件定义了特定地域的设置,比如日期格式和货币符号.接下来我们将介绍一些宏,以及一个重要的结构 struct lconv 和两个重要的函数. ...
- php魔术常量,_CLASS_,_METHOD_,_FUNCTION_
_CLASS_: 返回当前类的类名 _METHOD_:返回当前类方法的方法名(并显示类的调用,类名::方法名) _FUNCTION_:返回当前函数的函数名 _FILE_:当前文件的绝对路径(包含_FI ...
- HDU-2087 C - 剪花布条(KMP基本)
http://acm.hdu.edu.cn/showproblem.php?pid=2087 一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案.对于给定的花布条和小饰条,计算一下能 ...
- POJ 1850:Code 组合数学
Code Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 8710 Accepted: 4141 Description ...
- 我读《DOOM启世录》——成为一个真正厉害的人
序言 谈到游戏, 你的当然会想到几乎统治游戏市场多年的英雄联盟,你可能还会想起前段时间风头大盛的王者荣耀手游,你应该还会想起正在冲击着游戏市场的"吃鸡"类型游戏. 那么, 大家是否 ...
- 注意力机制和Seq2seq模型
注意力机制 在"编码器-解码器(seq2seq)"⼀节⾥,解码器在各个时间步依赖相同的背景变量(context vector)来获取输⼊序列信息.当编码器为循环神经⽹络时,背景变量 ...
- 命令行的操作——cd
初学命令行,总是提示找不到有关的文件,当时的我啥也不知道,最后就很惨,啥也找不到 后来就只好自己上网找资料了 以下博文改编自小佳的博客 在需要处理不同路径下的文件的时候,经常要在命令行模式下切换目录, ...
- CI项目设计Redis队列
项目开发过程中需要设计提供可平衡的处理多个用户请求的队列. 需求: 当用户登录后,查看系统中已经登录的管理员队列,然后查看后台管理员的处理能力,如果已经不能处理新的请求,则把该管理员从处理队列中删除, ...
- object detection模型转换成TensorFlow Lite,在Android应用
环境 tensorflow = 1.12.0 bazel = 0.18.1 ubuntu = 16.04 python = 3.6.2 安装 bazel (0.18.1) 如果tensorflow是1 ...
- Vue专题-js常用指令
vue.js官方给自己的定为是数据模板引擎,并给出了一套渲染数据的指令.本文详细介绍了vue.js的常用指令. vue.js常用指令 Vue.js使用方式及文本插值 Vue.js 使用了基于 HTML ...