牛骨文教育服务平台(让学习变的简单)

9.5 多文件上传

介绍了PHP上传单个文件的过程。但是有些时候,为了使用方便,我们需要满足同时上传多个文件的需求。多文件上传原理相同,不过在处理数据时,需要对上传数据进行特殊处理。

<html> 
    <head> 
        <meta charset="utf-8" /> 
        <title>单文件上传</title> 
    </head> 
    <body> 
        <form action="morefile.php" method="post" enctype="multipart/form-data"> 
         <input type="file" name="file[]"> 
         <input type="file" name="file[]"> 
         <input type="submit" value="上传"> 
     </form> 
    </body> 
</html> 

这里是一个简易的上传页面,form表单同时提交了两个文件。我们 可以通过这个页面提交内容。

注意:

  1. input type="file" name="file[]"与之前相比file后多加了一个中括号

  2. 写了2个或者多个input type="file" name="file[]"
    我们使用 $_FILES 来接收文件信息,打印并查看数组:


<?php 
var_dump($_FILES); //打印$_FILES查看数组结构 
?> 

数组结构如下


array (size=1)  
    "file" =>  
        array (size=5) 
    "name" =>  
        array (size=2) 
        //文件名 
        0 => string "psu.jpg" (length=7) 
        1 => string "qwe.jpg" (length=7) 
    //文件mime类型 
    "type" => array (size=2) 
            0 => string "image/jpeg" (length=10) 
            1 => string "image/jpeg" (length=10) 
    //缓存文件 
    "tmp_name" =>  
        array (size=2) 
            0 => string "E:wamp	mpphpF6D5.tmp" (length=23) 
            1 => string "E:wamp	mpphpF6F5.tmp" (length=23) 
    //文件错误信息 
    "error" =>  
        array (size=2) 
            0 => int 0 
            1 => int 0 
    //文件大小 
    "size" =>  
        array (size=2) 
        0 => int 225824	 
        1 => int 151651 

我们可以看到,两个文件被存储在一个数组中,键名和上传单文件是相同。所以,需要我们用for()循环,来分别取出两个文件的需要用到的数据。

在$_FILES中同时保存了两个文件的数据,我们需要使用一个简单的循环,来读取单个文件的信息,并将文件移动到我们想要放的位置。

	
for ($i=0; $i < count($_FILE["file"]["name"]); $i++) {  
	
/* 
用is_uploaded_file()函数判断是上传文件 
并且没有出现错 
*/ 

    if(is_uploaded_file($_FILEs["file"]["tmp_name"][$i]) && $_FILEs["file"]["error"][$i] == 0){	 
        if(move_uploaded_file($_FILEs["file"]["tmp_name"][$i],"upload/".$_FILE["file"]["name"][$i])){
    //用move_uploaded_file()函数移动文件到指定的位置并使用文件原名 
    echo "上传成功"; 

        }else{ 

            echo "上传失败"; 

        } 

    }else{ 

        echo "上传失败"; 
	
    } 
	
} 
	

详细的判断过程,参见单文件上传,这里只做了基本的判断,并没有对文件的大小及格式提醒。
请按照业务,自行判断文件大小及格式进行错误提醒。