这里有新鲜出炉的 PHP 面向对象编程,程序狗速度看过来!
PHP(外文名: Hypertext Preprocessor,中文名:"超文本预处理器")是一种通用开源脚本语言。语法吸收了 C 语言、Java 和 Perl 的特点,入门门槛较低,易于学习,使用广泛,主要适用于 web 开发领域。PHP 的文件后缀名为 php。
本篇文章主要介绍了 PHP 实现上传多文件示例代码的相关资料, 具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
上传多文件
1. 在对多文件信息进行操作前,需要构建文件信息,通过 buildInfo 函数将三维数组转换成便于文件操作的二维数组。
- function buildInfo() {
- $i = 0;
- foreach($_FILES as $v) {
- //判断是否是单文件
- if (is_string($v['name'])) {
- $files[$i] = $v;
- $i++;
- } else {
- //多文件
- foreach($v['name'] as $key = >$value) {
- $files[$i]['name'] = $value;
- $files[$i]['size'] = $v['size'][$key];
- $files[$i]['tmp_name'] = $v['tmp_name'][$key];
- $files[$i]['type'] = $v['type'][$key];
- $files[$i]['error'] = $v['error'][$key];
- $i++;
- }
- }
- }
- return $files;
- }
单文件和多文件的判断在于文件数组的类型,单文件(二维数组)、多文件(三维数组)。
2. 文件上传函数及参数
- function uploadFiles($path = "uploads", $allowExt = array("jpg", "gif", "png", "wbmp"), $maxSize = 1048576, $imgFlag = true)
path,保存目录。allowExt,允许扩展名数组。maxSize 最大上传文件大小。imgFlag,图片文件标识符。
3. 判断保存文件的目录是否存在
- if (!file_exists($path)) {
- mkdir($path, 0777, true);
- }
4. 传入构建好的文件信息,保存到 files
- $i = 0;
- $files = buildInfo();
5. 判断文件的 error 类型
- foreach($files as $file) {
- if ($file['error'] == UPLOAD_ERR_OK) {} else {
- switch ($file['error']) {
- case 1:
- $mes = "超过配置文件上传文件大小";
- break;
- case 2:
- $mes = "超过了表单设置";
- break;
- case 3:
- $mes = "文件部分被上传";
- break;
- case 4:
- $mes = "没有文件上传";
- break;
- case 6:
- $mes = "没找到临时目录";
- break;
- case 7:
- $mes = "文件不可写";
- break;
- case 8:
- $mes = "由于PHP的扩展程序中断了文件上传";
- break;
- }
6. 限制文件类型
- if ($file['error'] == UPLOAD_ERR_OK) {
- $ext = getExt($file['name']);
- if (!in_array($ext, $allowExt)) {
- exit("非法文件类型");
- }
7. 限制是否为真的图片类型
- if ($imgFlag) {
- if (!getimagesize($file['tmp_name'])) {
- exit("不是真的图片类型");
- }
- }
8. 判断文件大小
- if ($file['size'] > $maxSize) {
- exit("文件过大");
- }
9. 判断文件是否通过 post 上传
- if (!is_uploaded_file($file['tmp_name '])){
- exit("文件不是通过HTTP POST上传");
- }'
10. 重命名文件(唯一且不重复)并保存到目标目录
- $filename = getUniName().".".$ext;
- $destination = $path."/".$filename;
- if (move_uploaded_file($file['tmp_name'], $destination)) {
- $mes = "文件上传成功";
- $file['name'] = $filename;
- unset($file['error'], $file['tmp_name']);
- $uploadedFiles[$i] = $file;
- $i++;
- }
重写文件信息数组中的 name,删除变量 file['error'] 和 file['tmp_name']。最后将成功上传的文件保存到 uploadedFiles 数组中。
来源: http://www.phperz.com/article/17/0806/340485.html