使用PHP制作多文件上传
来源:互联网 发布:博克软件 收入 编辑:程序博客网 时间:2024/06/10 00:42
/**
* 将$_FILES统一为二维索引+关联数组
* return array
*/
function getFilesArray(){
$i=0;
foreach($_FILES as $file){
if(is_string($file['name'])){
$arr[$i]=$file;
$i++;
}else if(is_array($file['name'])){
foreach($file['name'] as $k=>$v){
$arr[$k]['name']=$file['name'][$k];
$arr[$k]['type']=$file['type'][$k];
$arr[$k]['tmp_name']=$file['tmp_name'][$k];
$arr[$k]['error']=$file['error'][$k];
$arr[$k]['size']=$file['size'][$k];
}
}
}
return $arr;
}
/**
* 多文件上传
* @param string $uploadDir 必选参数,上传文件存放的目录
* @param int $maxsize 可选参数,限制上传文件大小
* @param array $allowType 可选参数,限制上传文件类型
* @param bool $isImg 可选参数,限制上传文件类型是否必须为图片
* return array 上传成功返回是文件名,上传失败返回的是错误信息
*/
function multiUpload($uploadDir,$maxsize=1048576,$allowType=array('jpg','jpeg','gif','png'),$isImg=false){
// echo "<pre>";
//为了解决用户file表单元素name值的不同引起的问题,我们应该将接收的关联数组转为索引数组
$files=getFilesArray();
// print_r($files);
foreach($files as $k=>$v){
//获取错误代码
$error=$files[$k]['error'];
if($error===0){
//获取临时文件
$tmp_name=$files[$k]['tmp_name'];
//获取原文件名
$name=$files[$k]['name'];
//获取文件大小
$size=$files[$k]['size'];
//包含工具文件
//如果后续的代码必须依赖被包含的文件才能执行,则建议使用require或require_once
//如果后续的代码不需要被含文件也能继续执行,则建议使用include或include_once
require_once "common.inc.php";
//限制上传文件的大小
if($size>$maxsize){
$res[$k]['error']='文件大小超过1M的最大限制';
continue;
}
//判断文件是否为http_post方式上传
if(!is_uploaded_file($tmp_name)){
$res[$k]['error']='文件不是以http_post方式上传';
continue;
}
if($isImg){
//判断是否为真实的图片
/*echo $tmp_name;
print_r(getimagesize($tmp_name));
exit;*/
if(!@getimagesize($tmp_name)){
$res[$k]['error']='上传的文件不是一个图片';
continue;
}
}
//获取文件后缀名
$ext=getFileExt($name);
//限制上传文件的类型
if(!in_array($ext,$allowType)){
$res[$k]['error']='上传文件类型不允许';
continue;
}
//生成随机唯一字符串
$name=getUniqStr();
//生成新的唯一文件名
$filename=$name.'.'.$ext;
//创建文件保存的目录
if(!file_exists($uploadDir)){
mkdir($uploadDir);
}
//将文件从临时目录移动到指定目录
if(move_uploaded_file($tmp_name,$uploadDir.'/'.$filename)){
$res[$k]['filename']=$filename;
}
}else{
switch($error){
case 1:
$res[$k]['error']='上传文件字节数超过PHP配置文件upload_max_filesize所规定的字节数';
break;
case 2:
$res[$k]['error']='上传文件字节数超过表单隐藏域(MAX_FILE_SIZE)规定的字节数';
break;
case 3:
$res[$k]['error']='文件部分被上传';
break;
case 4:
$res[$k]['error']='没有上传文件';
break;
case 6:
$res[$k]['error']='没有临时目录';
break;
case 7:
$res[$k]['error']='临时目录没有写入权限';
break;
default:
$res[$k]['error']='未知错误';
}
}
}
return $res;
}
* 将$_FILES统一为二维索引+关联数组
* return array
*/
function getFilesArray(){
$i=0;
foreach($_FILES as $file){
if(is_string($file['name'])){
$arr[$i]=$file;
$i++;
}else if(is_array($file['name'])){
foreach($file['name'] as $k=>$v){
$arr[$k]['name']=$file['name'][$k];
$arr[$k]['type']=$file['type'][$k];
$arr[$k]['tmp_name']=$file['tmp_name'][$k];
$arr[$k]['error']=$file['error'][$k];
$arr[$k]['size']=$file['size'][$k];
}
}
}
return $arr;
}
/**
* 多文件上传
* @param string $uploadDir 必选参数,上传文件存放的目录
* @param int $maxsize 可选参数,限制上传文件大小
* @param array $allowType 可选参数,限制上传文件类型
* @param bool $isImg 可选参数,限制上传文件类型是否必须为图片
* return array 上传成功返回是文件名,上传失败返回的是错误信息
*/
function multiUpload($uploadDir,$maxsize=1048576,$allowType=array('jpg','jpeg','gif','png'),$isImg=false){
// echo "<pre>";
//为了解决用户file表单元素name值的不同引起的问题,我们应该将接收的关联数组转为索引数组
$files=getFilesArray();
// print_r($files);
foreach($files as $k=>$v){
//获取错误代码
$error=$files[$k]['error'];
if($error===0){
//获取临时文件
$tmp_name=$files[$k]['tmp_name'];
//获取原文件名
$name=$files[$k]['name'];
//获取文件大小
$size=$files[$k]['size'];
//包含工具文件
//如果后续的代码必须依赖被包含的文件才能执行,则建议使用require或require_once
//如果后续的代码不需要被含文件也能继续执行,则建议使用include或include_once
require_once "common.inc.php";
//限制上传文件的大小
if($size>$maxsize){
$res[$k]['error']='文件大小超过1M的最大限制';
continue;
}
//判断文件是否为http_post方式上传
if(!is_uploaded_file($tmp_name)){
$res[$k]['error']='文件不是以http_post方式上传';
continue;
}
if($isImg){
//判断是否为真实的图片
/*echo $tmp_name;
print_r(getimagesize($tmp_name));
exit;*/
if(!@getimagesize($tmp_name)){
$res[$k]['error']='上传的文件不是一个图片';
continue;
}
}
//获取文件后缀名
$ext=getFileExt($name);
//限制上传文件的类型
if(!in_array($ext,$allowType)){
$res[$k]['error']='上传文件类型不允许';
continue;
}
//生成随机唯一字符串
$name=getUniqStr();
//生成新的唯一文件名
$filename=$name.'.'.$ext;
//创建文件保存的目录
if(!file_exists($uploadDir)){
mkdir($uploadDir);
}
//将文件从临时目录移动到指定目录
if(move_uploaded_file($tmp_name,$uploadDir.'/'.$filename)){
$res[$k]['filename']=$filename;
}
}else{
switch($error){
case 1:
$res[$k]['error']='上传文件字节数超过PHP配置文件upload_max_filesize所规定的字节数';
break;
case 2:
$res[$k]['error']='上传文件字节数超过表单隐藏域(MAX_FILE_SIZE)规定的字节数';
break;
case 3:
$res[$k]['error']='文件部分被上传';
break;
case 4:
$res[$k]['error']='没有上传文件';
break;
case 6:
$res[$k]['error']='没有临时目录';
break;
case 7:
$res[$k]['error']='临时目录没有写入权限';
break;
default:
$res[$k]['error']='未知错误';
}
}
}
return $res;
}
阅读全文
0 0
- 使用PHP制作多文件上传
- 使用PHP制作单文件上传
- php 制作文件上传类
- 使用php上传文件
- 使用PHP实现文件上传和多文件上传
- 使用PHP实现文件上传和多文件上传
- 使用 PHP 一次上传多个文件
- php使用curl上传文件
- php使用curl上传文件
- PHP使用cURL上传文件
- 使用PHP实现文件上传
- 使用PHP实现文件上传
- 使用PHP上传文件到树莓派
- 使用common-fileUpload制作文件上传
- 使用common-fileUpload制作文件上传
- php多文件上传`
- php 多文件上传
- php多文件上传
- Android 之 HttpURLConnection 访问网络
- js插件的经典写法与总结
- c++string类 append用法
- RXJava+retrofit的使用尝试
- 浅谈vector中的push_back(无realloc)和 创建vector(n) 后通过下标赋值
- 使用PHP制作多文件上传
- 泛型
- 自主悬停&高度融合
- maven配置
- ThreadLocal浅析
- 二叉树的链式结构
- 如何使用JPanel中间容器
- 简单密码明文和16,32MD5密码对应
- js:面向对象编程,带你认识封装、继承和多态