首页 > 编程语言 >PHP 多文件上传功能实例讲解

PHP 多文件上传功能实例讲解

时间:2022-08-22 20:55:17浏览次数:90  
标签:FILES 文件 name die 实例 file PHP 上传

PHP文件上传功能是非常普片的需求,而在网站开发过程中,我们可以需要同时上传多个文件,这个时候就需要开发出php多文件上传的功能。在本教程中,我将向您展示如何使用PHP实现多个文件上传。

 

HTML代码

首先, 您需要创建一个属性为 enctype ='multiple / form-data'的HTML表单。实际上, enctype属性指定将表单数据提交到服务器时应如何编码。使用具有文件上载控件的表单时,需要将enctype指定为multiple / form-data。

如果使用单个input file文本控件,则需要将input file设置为可以选择多个文件。因此,需要将input file命名为数组,例如: name="upload[]" 。

<form method='post' action='' enctype='multipart/form-data'>
 
 <input type="file" name="upload[]" id="upload" multiple>
 <input type='submit' name='submit' value='Upload'>

</form>

 

PHP代码

在处理表单之前,请先检查表单是否已提交。

if(isset($_POST['submit']))

下一步检查上传文件的个数,上传个数必须大于或等于1个,否则不作任何处理。

if(count($_FILES['upload']['name']) > 0)

循环浏览文件,设置一个tmp文件路径以将该路径保存到文件的临时位置。

for($i=0; $i<count($_FILES['upload']['name']); $i++) {
    //Get the temp file path
    $tmpFilePath = $_FILES['upload']['tmp_name'][$i];

    //Make sure we have a filepath
    if($tmpFilePath != ""){

将文件名保存到$shortname变量中以用于查看文件名,$filePath将保存文件的完整URL,然后将其上传到名为Uploaded的文件夹中。每个文件的日期和时间都将添加到文件名的开头,这可以防止任何现有文件被覆盖。

//save the filename
$shortname = $_FILES['upload']['name'][$i];

//save the url and the file
$filePath = "/uploaded/" . date('d-m-Y-H-i-s').'-'.$_FILES['upload']['name'][$i];

//Upload the file into the temp dir
if(move_uploaded_file($tmpFilePath, $filePath)) {

    //insert into db 
    //use $shortname for the filename
    //use $filePath for the relative url to the file

}

 

PHP多文件上传完整示例

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>文件上传</title>
</head>
<body>
<?php

$allowtype = array("gif","png","jpg"); //允许上传的文件格式
$size = 1000000; //设置允许大小1M以内的文件
$path = "./uploads"; //设置上传后保存文件的路径


//判断文件是否可以上传到服务器 $_FILES['myfile'][error]为0表示成功
//循环
for( $i = 0;$i < count($_FILES['myfile']['error']);$i++ ){

    $upfile[$i] = $_FILES['myfile']['name'][$i];

    if($_FILES['myfile']['error'][$i]>0){

        echo "上传错误";
        switch($_FILES['myfile']['error'][$i]){
        
            case 1: die('第'.($i+1).'个文件上传文件大小超出了PHP配置文件中的约定值:upload_max_filesize');
            case 2: die('上传第'.($i+1).'个文件大小超出了表单中的约定值:MAX_FILE_SIZE');
            case 3: die('第'.($i+1).'个文件只被部分上传');
            case 4: die('第'.($i+1).'个文件没有上传');
            default: die('未知错误');
        }
    }



    //判断上传的文件是否为允许的文件类型,通过文件的后缀名
    //array_pop 弹出并返回数组中的最后一个元素,并将array的长度减1
    $hz[$i] = array_pop(explode(".",$_FILES['myfile']['name'][$i]));
    if(!in_array($hz[$i],$allowtype)){

        die("第".($i+1)."个文件后缀是<b>{$hz}</b>,不是允许的文件类型!");
    }

    /*也可通过获取上传文件的MIME类型中的主类型和子类型,来限制文件上传的类型
    list($maintype,$subtype) = explode("/",$_FILES['myfile']['type']);
    if($maintype == "text"){

        die("不能上传文本文件");
    }
    */

    //判断上传的文件是否允许大小
    if($_FILES['myfile']['size'][$i]>$size){

        die("第".($i+1)."个文件超过了允许的<b>{$size}</b>");
    }


    //为了系统安全,同时也为了同名文件不被覆盖,上传后将文件名使用系统定义
    $filename[$i] = date("YmdHis").rand(100,999).".".$hz[$i];


    //判断是否为上传文件
    if(is_uploaded_file($_FILES['myfile']['tmp_name'][$i])){

        if(!move_uploaded_file($_FILES['myfile']['tmp_name'][$i],$path.'/'.$filename[$i])){
        
            die("不能将文件移动到指定目录");
        }
    }else{

        die("上传文件{$_FILES['myfile']['name'][$i]}不是一个合法文件");
    }

    //如果文件上传成功
    $filesize[$i] = $_FILES['myfile']['size'][$i]/1024;
    echo "文件{$upfile[$i]}上传成功,保存在目录{$path}中,文件大小为{$filesize[$i]}KB<br>";
}
?>

    <form action="upload.php" method="post" enctype="multipart/form-data">
        
        <input type="hidden" name="MAX_FILE_SIZE" value="1000000">
        选择文件1:<input type="file" name="myfile[]"><br>
        选择文件2:<input type="file" name="myfile[]"><br>
        选择文件3:<input type="file" name="myfile[]"><br>
        <input type="submit" value="上传文件">

    </form>

</body>
</html>

以上就是本文的全部内容,希望对大家的学习有所帮助。更多教程请访问码农之家

标签:FILES,文件,name,die,实例,file,PHP,上传
From: https://www.cnblogs.com/myhomepages/p/16614225.html

相关文章

  • PHP数组输出为xml的两种常见方法
    很多时候,我们需要将数据以XML格式存储到数据库或文件中,以备后用。为了满足此需求,我们将需要将数据转换为XML并保存XML文件。在本教程中,我们将讨论如何使用PHP将数组转化为x......
  • PHP判断远程文件是否存在的四种方法
    PHPfile_exists()函数用于检查服务器上是否存在一个文件或目录。但是,如果要检查远程服务器上的文件是否存在,file_exists()函数将不可用。本文将介绍php中如何判断远程文......
  • Docke 搭建 apache2 + php8 + MySQL8 环境
    Docker安装执行Docker安装命令curl-fsSLhttps://get.docker.com/|sh启动Docker服务sudoservicedockerstart查看Docker是否正常工作sudo......
  • 博客粘贴图片自动上传到服务器(Java版)
    ​如何做到ueditor批量上传word图片?1、前端引用代码<!DOCTYPE html PUBLIC "-//W3C//DTDXHTML1.0Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-......
  • wordpress粘贴图片自动上传到服务器(Java版)
    ​ 在之前在工作中遇到在富文本编辑器中粘贴图片不能展示的问题,于是各种网上扒拉,终于找到解决方案,在这里感谢一下知乎中众大神以及TheViper。通过知乎提供的思路找到粘......
  • JS判断是手机访问还是电脑访问,并自动跳转 可在PHP中使用 (2014-12-02 14:41:26)
    方法一、在head内调用以下代码《uaredirect.js》该文件下载地址:http://siteapp.baidu.com/static/webappservice/uaredirect.js百度网盘下载地址:http://pan.baidu.com/......
  • Php语法知识点小结
    参考https://www.cnblogs.com/zyf-zhaoyafei/p/4828358.html#tree19isset()、empty()与is_null的区别1、当变量未定义时,is_null()和“参数本身”是不允许作为参数判......
  • SiteFactory粘贴图片自动上传到服务器(Java版)
    ​这种方法是servlet,编写好在web.xml里配置servlet-class和servlet-mapping即可使用后台(服务端)java服务代码:(上传至ROOT/lqxcPics文件夹下)<%@ page language="java" i......
  • PHP认证 MP4文件 播放
    1、问题直接放在WEB目录下,文件不安全,没有认证可以直接访问;PHP认证通过后返回WEB目录下的真实文件地址,不安全,访问一次后后续可以直接访问;用PHP读MP4文件然后再输出:加载......
  • 动易CMS粘贴图片自动上传到服务器(Java版)
    ​ tinymce是很优秀的一款富文本编辑器,可以去官网下载。https://www.tiny.cloud这里分享的是它官网的一个收费插件powerpaste的旧版本源码,但也不影响功能使用。umedit......