12.4.3 處理多個文件上傳

12.4.3 處理多個文件上傳

當需要上傳多個文件的情況,有兩種實現的解決方法:
使用不同的表單元素
<input type="file" name="file_a">
<input type="file" name="file_b">
<input type="file" name="file_b">
使用數組格式的表單元素
<input type="file" name="file[]">
<input type="file" name="file[]">
<input type="file" name="file[]">

upform.html

<form action="upload.php" method="post" enctype="multipart/form-data" >
    name: <input type="text" name="username" value="" /><br>
    <input type="hidden" name="MAX_FILE_SIZE" value="1000000" />
    up pic: <input type="file" name="pic[]" value=""><br>
    up pic: <input type="file" name="pic[]" value=""><br>
    up pic: <input type="file" name="pic[]" value=""><br>
    up pic: <input type="file" name="pic[]" value=""><br>

    <input type="submit" value="upload" /><br>

</form> 

upload.php

<?php
header("Content-Type:text/html;charset=utf-8");
/*
Array
(
    [pic] => Array
        (
            [name] => 195_4074_831a070561e20a0.jpg
            [type] => image/jpeg
            [tmp_name] => C:\wamp\tmp\php45.tmp
            [error] => 0
            [size] => 43274
        )

)

[pic] = array(
  [0] => Array
        (
            [name] => 195_4074_831a070561e20a0.jpg
            [type] => image/jpeg
            [tmp_name] => C:\wamp\tmp\php45.tmp
            [error] => 0
            [size] => 43274
    )

  [1] => Array
        (
            [name] => 195_4074_831a070561e20a0.jpg
            [type] => image/jpeg
            [tmp_name] => C:\wamp\tmp\php45.tmp
            [error] => 0
            [size] => 43274
    )

  [2] => Array
        (
            [name] => 195_4074_831a070561e20a0.jpg
            [type] => image/jpeg
            [tmp_name] => C:\wamp\tmp\php45.tmp
            [error] => 0
            [size] => 43274
    )

  [3] => Array
        (
            [name] => 195_4074_831a070561e20a0.jpg
            [type] => image/jpeg
            [tmp_name] => C:\wamp\tmp\php45.tmp
            [error] => 0
            [size] => 43274
    )
    )
 * *
Array
(
    [pic] => Array
        (
            [name] => Array
                (
                    [0] => 175_2426_3ecb275c994a192.jpg
                    [1] => 195_4074_831a070561e20a0.jpg
                    [2] => 46348.jpg
                    [3] => 4e4b68e5a9334.jpg
                )

            [type] => Array
                (
                    [0] => image/jpeg
                    [1] => image/jpeg
                    [2] => image/jpeg
                    [3] => image/jpeg
                )

            [tmp_name] => Array
                (
                    [0] => C:\wamp\tmp\php30.tmp
                    [1] => C:\wamp\tmp\php31.tmp
                    [2] => C:\wamp\tmp\php32.tmp
                    [3] => C:\wamp\tmp\php33.tmp
                )

            [error] => Array
                (
                    [0] => 0
                    [1] => 0
                    [2] => 0
                    [3] => 0
                )

            [size] => Array
                (
                    [0] => 8374
                    [1] => 43274
                    [2] => 4052
                    [3] => 108521
                )

        )

)
 *
 *
 */


$num = count($_FILES['pic']['name']);

for($i=0; $i<$num; $i++) {

    //第一步: 判斷錯誤
    if($_FILES['pic']['error'][$i] > 0) {
        switch($_FILES['pic']['error'][$i]) {
            case 1:
                echo "表示上傳文件的大小超出了約定值。文件大小的最大值是在PHP配置文件中指定的,該指令是:upload_max_filesize<br>";
                break;
            case 2:
                echo "表示上傳文件大小超出了HTML表單隱藏域屬性的MAX_FILE_SIZE元素所指定的最大值1M<br>";
                break;
            case 3:
                echo "表示文件只被部分上傳<br>";
                break;
            case 4:
                echo "表示沒有上傳任何文件<br>";
                break;
        
            default:
                echo "末知錯誤<br>";
                
        }
    
        

        continue;
    }

    //第二步: 判斷類型
    $arr = explode(".", basename($_FILES['pic']['name'][$i]));
    $hz = array_pop($arr);
    
    $allowtype =array("gif", "png", "jpg", "jpeg");

    if(!in_array($hz, $allowtype)) {
        echo "上傳的類型不合法";
        continue;
    } 

    //第三步: 判斷大小
    $maxsize= 1000000;
    if($_FILES['pic']['size'][$i] > $maxsize) {
        echo "上傳的文件超過了,{$maxsize}字節!";
        continue;
    }


    //第四步, 上傳后的文件名一定要設置

    $tmpfile = $_FILES['pic']['tmp_name'][$i];
    $srcname = "./uploads/".date("YmdHis").rand(100, 999).".".$hz;

    //將臨時目錄下的上傳的文件,復制到我指定目錄下, 指定的名子就可以完成上傳
    if( move_uploaded_file($tmpfile, $srcname) ) {
        echo "上傳 {$_FILES['pic']['name'][$i]} 成功!<br>";
    }else{
        echo "上傳失敗!<br>";
    }

}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,914評論 18 139
  • Php:腳本語言,網站建設,服務器端運行 PHP定義:一種服務器端的HTML腳本/編程語言,是一種簡單的、面向對象...
    廖馬兒閱讀 2,185評論 2 38
  • 一、會話控制(session與cookie) 1.cookie簡介 Cookie是存儲在客戶端瀏覽器中的數據,我們...
    空谷悠閱讀 649評論 0 5
  • 減肥餐 1 五毛遇到桃子的時候,她正在經歷一場曠日持久的失戀。 別人家的失戀只需三十三天就能治愈,五毛遇到她的時候...
    林陌鹿閱讀 1,167評論 38 22
  • 5-23日 多日不執筆,總想寫寫,卻總是這樣那樣的錯過了,今日稍有閑暇,閑敘幾句,聊以慰藉。 又到周末了,五月的太...
    ecbbebb97102閱讀 328評論 0 2