PHP原生文件上传(单文件多文件均可)简单案例

本案例共三个文件,目录结构如下图所示:

do_action1.php(前台页面)页面的代码如下:

<?php
header("content-type:text/html;charset=utf-8;");
echo "<pre>";
//print_r($_FILES);
require_once "upload_function1.php";
$files=getFiles();
//print_r($files);
foreach($files as $fileInfo){
    $res=uploadFile($fileInfo);
    echo $res[‘mes‘],‘<br/>‘;
    //$uploadFiles[][email protected]$res[‘dest‘];
    if(isset($res[‘dest‘])) {
        $uploadFiles[]=$res[‘dest‘];
    }else{
        continue;
    }
}
//$uploadFiles=array_values(array_filter($uploadFiles)); 过滤数组中的空值并从新排序
print_r($uploadFiles);

upload.html(后台页面)页面的代码如下:

<html>
<head>
<meta charset="utf-8">
</head>
<body>

<form action="do_action1.php" method="post"
enctype="multipart/form-data">
<!--<input type="hidden" name="MAX_FILE_SIZE" value="176942">-->
<label for="file">请选择要上传的文件:</label><input type="file" name="file1" id="file" accept="image/jpeg,image/gif,image/png"/> <br />
<label for="file">请选择要上传的文件:</label><input type="file" name="file2" id="file" /> <br />
<label for="file">请选择要上传的文件:</label><input type="file" name="file[]" id="file" /> <br />
<label for="file">请选择要上传的文件:</label><input type="file" name="file[]" id="file" /> <br />
<label for="file">请选择要上传的文件:</label><input type="file" name="file[]" id="file" multiple /> <br />
<input type="submit" name="submit" value="上传" />
</form>

</body>
</html>

upload_function1.php(功能函数)页面的代码如下:

<?php
//构建上传文件的信息
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=>$value){
                $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));
}
function uploadFile($fileInfo,$uploadPath="uploads",$maxSize=2097152,$flag=false,$allowExt=array("jpeg","jpg","png","gif")){
    //$flag=true;//是否检测图片是否是真实的图片类型
    $allowExt=array(‘jpeg‘,‘jpg‘,‘gif‘,‘png‘);
    if($fileInfo[‘error‘]==UPLOAD_ERR_OK){
       //检测上传文件大小
       if($fileInfo[‘size‘]>$maxSize){
           $res[‘mes‘]=‘上传文件过大‘;
       }
       //检测上传文件的文件类型
       $ext=getExt($fileInfo[‘name‘]);//得到上传文件的后缀
       if(!in_array($ext,$allowExt)){
           $res[‘res‘]=‘非法文件类型‘;
       }
       if($flag){
           if(!getimagesize($fileInfo[‘tmp_name‘])){
               $res[‘mes‘]=‘不是真实的图片类型‘;
           }
       }
       //检测文件是否是通过HTTP POST上传上来的
       if(!is_uploaded_file($fileInfo[‘tmp_name‘])){
           $res[‘mes‘]=‘文件不是通过HTTP POST方式上传上来的‘;
       }
       if(isset($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:
                 $res[‘mes‘]="";
                break;
            case 8:
                 $res[‘mes‘]="系统错误";
                break;
        }
        return $res;
    }
}

本案例最终可以得到上传成功的图片的存储位置以数组方式存储方便后期与数据库对接,稍微改造即可拿去用了!

原文地址:https://www.cnblogs.com/xiaogou/p/8972243.html

时间: 2024-10-29 13:26:28

PHP原生文件上传(单文件多文件均可)简单案例的相关文章

php 文件上传后缀名与文件类型对照表(几乎涵盖所有文件)

网上有很多php文件上传的类,文件上传处理是php的一个特色(至少手册上是将此作为php特点来展示的,个人认为php在数组方面的优异功能更有特 色),学php的人都知道文件上传怎么做,但很多人在编程中却可能忽视了一些细节问题,那就是文件的类型(MIME).在表单将文件提交给php做处理之 前,浏览器会先解析识别一边是什么类型的文件,之后进入php处理环节,php又会去识别解析此文件的原始类型(并不是说你改成什么后缀就是什么文件). 在这个过程中会有一些浏览器兼容,更准确来说是文件类型解析标识不一

文件上传类,实现文件上传功能

/** *==================================================================  * upload.class.php 文件上传类,实现文件上传功能 * 2013年3月27日0:37:15 *================================================================== */ class Upload{    private $path;   //文件上传目录    privat

【Java】Struts2文件上传-单文件上传,多文件上传

单文件上传 表单: <form action="upload1.action" method="post" enctype="multipart/form-data"> 姓名:<input type="text" name="name" id="name"><br> 照片:<input type="file" name=&qu

ajax结合文件上传类进行多文件的单个上传

今天做项目的时候碰见一个问题:之前一个同事离职之前做了一个网站,有一个上传商品详细图片的功能,当时已经完成,但是由于后期程序的有更改以及更改的程序员的水平也是参差不齐,最后导致程序bug很多,由于当时用的是一个框架,最终也没找到说明文档,后来我就重新写了一个结合ajax上传文件的upload.classs.php虽然界面欠缺美观,但是通俗易懂好维护. //首先是页面. index.php <!DOCTYPE html> <html lang="en"> <

PHP核心编程--文件上传(包含多文件上传)

一.单文件上传 图片上传界面: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <form name='frm'action="./uploadSave.php" method="p

SpringMVC 文件上传配置,多文件上传,使用的MultipartFile

一.配置文件:SpringMVC 用的是 的MultipartFile来进行文件上传 所以我们首先要配置MultipartResolver:用于处理表单中的file <!-- 配置MultipartResolver 用于文件上传 使用spring的CommosMultipartResolver --> <beans:bean id="multipartResolver" class="org.springframework.web.multipart.com

Servlet实现文件上传,可多文件上传

一.Servlet实现文件上传,需要添加第三方提供的jar包 下载地址: 1) commons-fileupload-1.2.2-bin.zip      :   点击打开链接 2) commons-io-2.3-bin.zip                       :    点击打开链接 接着把这两个jar包放到 lib文件夹下: 二: 文件上传的表单提交方式必须是POST方式, 编码类型:enctype="multipart/form-data",默认是 applicatio

spring boot工程文件上传出现net::ERR_CONNECTION_ABORTED,文件上传失败

SpringBoot做文件上传时出现了The field file exceeds its maximum permitted size of 1048576 bytes.错误,显示文件的大小超出了允许的范围.查看了官方文档,原来Spring Boot工程嵌入的tomcat限制了请求的文件大小,这一点在Spring Boot的官方文档中有说明,原文如下 65.5 Handling Multipart File UploadsSpring Boot embraces the Servlet 3 j

SpringMVC 文件上传配置,多文件上传,使用的MultipartFile(转)

文件上传项目的源码下载地址:http://download.csdn.net/detail/swingpyzf/6979915   一.配置文件:SpringMVC 用的是 的MultipartFile来进行文件上传 所以我们首先要配置MultipartResolver:用于处理表单中的file [html] view plain copy print? <!-- 配置MultipartResolver 用于文件上传 使用spring的CommosMultipartResolver --> &

案例52-crm练习新增客户中加入文件上传功能(struts2文件上传)

1 jsp/customer/add.jsp 完整代码: <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <!DOCTYPE