PHP实现单文件上传、多个单文件上传、多文件上传的过程化封装
2016-04-08 23:30
691 查看
上回提到 PHP的单个文件上传、多个单文件上传、多文件上传
这里给出 三种方式的统一实现
下面先给出各种方式的文件提交页面:
单个文件上传 upload1.php
多个单文件上传 upload2.php
多文件上传 upload3.php
文件上传处理 doAction5.php
实现文件上传的函数 upload.func.php
这里给出 三种方式的统一实现
下面先给出各种方式的文件提交页面:
单个文件上传 upload1.php
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>单文件上传</title> </head> <body> <form action="doAction5.php" method="post" enctype="multipart/form-data"> 请选择您要上传的文件: <input type="file" name="myFile"/><br/> <input type="submit" value="上传文件"/> </form> </body> </html>
多个单文件上传 upload2.php
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>多个单文件上传</title> </head> <body> <form action="doAction5.php" method="post" enctype="multipart/form-data"> 请选择您要上传的文件:<input type="file" name="myFile1"/><br/> 请选择您要上传的文件:<input type="file" name="myFile2"/><br/> 请选择您要上传的文件:<input type="file" name="myFile3"/><br/> 请选择您要上传的文件:<input type="file" name="myFile4"/><br/> <input type="submit" value="上传文件"/> </form> </body> </html>
多文件上传 upload3.php
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>多文件上传</title> </head> <body> <form action="doAction5.php" method="post" enctype="multipart/form-data"> 请选择您要上传的文件:<input type="file" name="myFile[]"/><br/> 请选择您要上传的文件:<input type="file" name="myFile[]"/><br/> 请选择您要上传的文件:<input type="file" name="myFile[]"/><br/> 请选择您要上传的文件:<input type="file" name="myFile[]"/><br/> <input type="submit" value="上传文件"/> </form> </body> </html>混合方式文件上传 upload4.php
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>混合方式文件上传</title> </head> <body> <form action="doAction5.php" method="post" enctype="multipart/form-data"> 请选择您要上传的文件:<input type="file" name="myFile1"/><br/> 请选择您要上传的文件:<input type="file" name="myFile2"/><br/> 请选择您要上传的文件:<input type="file" name="myFile[]"/><br/> 请选择您要上传的文件:<input type="file" name="myFile[]"/><br/> 请选择您要上传的文件:<input type="file" name="myFile[]" multiple="multiple"/><br/> <input type="submit" value="上传文件"/> </form> </body> </html>
文件上传处理 doAction5.php
<?php /** * Created by PhpStorm. * User: DreamBoy * Date: 2016/4/8 * Time: 21:39 */ header('content-type:text/html;charset=utf-8'); include_once 'upload.func.php'; $files = getFiles(); //print_r($files); foreach($files as $fileInfo) { $res = uploadFile($fileInfo); echo $res['mes'],'<br/>'; if(isset($res['dest'])) { $uploadFiles[] = $res['dest']; } } //过滤掉上传失败的文件 /** * array_values() 函数返回一个包含给定数组中所有键值的数组,但不保留键名。 * 提示:被返回的数组将使用数值键,从 0 开始并以 1 递增。 */ /** * array_filter() 函数用回调函数过滤数组中的值。 * 该函数把输入数组中的每个键值传给回调函数。如果回调函数返回 true, * 则把输入数组中的当前键值返回结果数组中。数组键名保持不变。 */ //这里使用array_filter过滤掉数组中的空内容 if(isset($uploadFiles)) { $uploadFiles=array_filter($uploadFiles); print_r($uploadFiles); }
实现文件上传的函数 upload.func.php
<?php /** * Created by PhpStorm. * User: DreamBoy * Date: 2016/4/8 * Time: 21:41 */ /** * 构建上传文件信息 * @return mixed */ function getFiles() { $i = 0; foreach($_FILES as $file) { //单文件或者多个单文件上传 if(is_string($file['name'])) { $files[$i] = $file; $i++; } //多文件上传 elseif(is_array($file['name'])) { foreach($file['name'] as $key=>$val) { $files[$i]['name'] = $file['name'][$key]; $files[$i]['type'] = $file['type'][$key]; $files[$i]['tmp_name'] = $file['tmp_name'][$key]; $files[$i]['error'] = $file['error'][$key]; $files[$i]['size'] = $file['size'][$key]; $i++; } } } return $files; } /** * 获取文件扩展名 */ function getExt($filename) { return strtolower(pathinfo($filename,PATHINFO_EXTENSION)); } /** * 获取唯一字符串 */ function getUniName() { return md5(uniqid(microtime(true), true)); } /** * 针对于单文件、多个单文件、多文件的上传 * @param array $fileInfo * @param string $path * @param bool $flag * @param int $maxSize * @param array $allowExt * @return array */ function uploadFile($fileInfo, $path='./uploads',$flag=true,$maxSize=1048576,$allowExt = array('jpeg','jpg','gif','png')) { //$allowExt = array('jpeg','jpg','gif','png'); //$flag = true; //$maxSize = 1048576; //1M $res = array(); //判断错误号 if($fileInfo['error'] == UPLOAD_ERR_OK) { //检测上传文件的大小 if($fileInfo['size'] > $maxSize) { $res['mes'] = $fileInfo['name'] . '上传文件过大'; } $ext = getExt($fileInfo['name']); //检测上传文件的文件类型 if(!in_array($ext, $allowExt)) { $res['mes'] = $fileInfo['name'] . '非法文件类型'; } //检测是否是真是的图片类型 if($flag) { if(!getimagesize($fileInfo['tmp_name'])) { $res['mes'] = $fileInfo['name'] . '不是真实图片类型'; } } //检测文件是否是通过HTTP POST上传上来的 if(!is_uploaded_file($fileInfo['tmp_name'])) { $res['mes'] = $fileInfo['name'] . '文件不是通过HTTP POST方式上传上来的'; } if($res) return $res; //$path = './uploads'; if(!file_exists($path)) { mkdir($path, 0777, true); chmod($path, 0777); } $uniName = getUniName(); $destination = $path . '/' . $uniName . '.' . $ext; if(!move_uploaded_file($fileInfo['tmp_name'],$destination)) { $res['mes'] = $fileInfo['name'] . '文件移动失败'; } $res['mes'] = $fileInfo['name'] . '上传成功'; $res['dest'] = $destination; return $res; } else { //匹配错误信息 switch($fileInfo['error']) { case 1: $res['mes'] = '上传文件超过了PHP配置文件中upload_max_filesize选项的值'; break; case 2: $res['mes'] = '超过了表单MAX_FILE_SIZE限制的大小'; break; case 3: $res['mes'] = '文件部分被上传'; break; case 4: $res['mes'] = '没有选择上传文件'; break; case 6: $res['mes'] = '没有找到临时目录'; break; case 7: case 8: $res['mes'] = '系统错误'; break; } return $res; } }
相关文章推荐
- PHP and laravel知识点小小积累
- PHP的单个文件上传、多个单文件上传、多文件上传
- PHP 两个多维数组根据某个键的值进行组合排序的几种思路
- PHP - 类型判断和NULL,空值检查
- LVM
- Ntp
- php设计模式之装饰器模式
- Thinkphp关联模型使用field或getField函数
- ContentProvider简单用法
- PHP单文件上传的过程化函数封装
- PHP文件上传的实现及其介绍
- PHP-006
- LAMP之phpadmin
- yii小物件详解
- yii小物件前端表单集合
- busybox中tftp服务器使用命令
- LAMP之mysql+php
- scan & ATPG
- Eclipse的PHP插件PHPEclipse安装和使用
- php中 如何生成jsonp数据接口及如何调用?