首頁 >每日程式設計 >PHP知識 >PHP實作多個檔案上傳的簡單方法有哪些? (圖文+影片)

PHP實作多個檔案上傳的簡單方法有哪些? (圖文+影片)

藏色散人
藏色散人原創
2018-09-17 17:32:2411033瀏覽

本篇文章將為大家介紹關於PHP實作多個檔案上傳的一些簡單方法。

在這篇知識內容介紹之前,我們在前面的文章【PHP檔案上傳方法詳解及其資訊解析】中已經為大家詳細介紹了php實作單一檔案上傳的具體方法,那麼這篇文章和今天要介紹的知識點是有關聯的,需要的朋友可以先參考學習下。

下面我們就透過具體的程式碼範例,為大家介紹PHP實作多檔案上傳的一些簡單方法。

第一種方法:利用單一檔案上傳方法

#一段簡單的form表單程式碼如下:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="upload.php" method="post" enctype="multipart/form-data">
 选择文件进行上传: <input type="file" name="file1">
 选择文件进行上传: <input type="file" name="file2">
 选择文件进行上传: <input type="file" name="file3">
    <input type="submit" value="上传">
</form>
</body>
</html>

程式碼效果如下圖:

PHP實作多個檔案上傳的簡單方法有哪些? (圖文+影片)

如圖我們選擇上傳了三個文件,然後我們再將文件上傳給upload.php文件中,PHP程式碼如下:

<?php
echo "<pre class="brush:php;toolbar:false">";
var_dump($_FILES);

那麼我們繼續透過瀏覽器存取結果如下:

PHP實作多個檔案上傳的簡單方法有哪些? (圖文+影片)

這裡我們得到了圖中的二維數組,如果我們想要進行多文件上傳就需要透過foreach循環來實現。

那麼upload.php完整程式碼如下:

<?php
echo "<pre class="brush:php;toolbar:false">";
var_dump($_FILES);
$files = [];
foreach ($_FILES as $fileInfo) {
    $files[] = upload_file($fileInfo);
}
var_dump($files);
function upload_file($fileInfo, $upload = "./upload", $imagesExt = ['gif', 'png', 'jpg'])
{
    if ($fileInfo['error'] === 0) {
        $ext = strtolower(pathinfo($fileInfo['name'], PATHINFO_EXTENSION));
        if (!in_array($ext, $imagesExt)) {
            return "文件非法类型";
        }
        if (!is_dir($upload)) {
            mkdir($upload, 0777, true);
        }
        $fileName = md5(uniqid(microtime(true), true)) . "." . $ext;
        $destName = $upload . "/" . $fileName;
        if (!move_uploaded_file($fileInfo['tmp_name'], $destName)) {
            return "文件上传失败!";
        }
        return "文件上传成功!";
    } else {
        switch ($fileInfo['error']) {
            case 1:
                echo '上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值';
                break;
            case 2:
                echo '上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值';
                break;
            case 3:
                echo '文件只有部分被上传';
                break;
            case 4:
                echo '没有文件被上传';
                break;
            case 6:
                echo '找不到临时文件夹';
                break;
            case 7:
                echo '文件写入失败';
                break;
        }
    }
}

最後我們選擇多個檔案上傳,結果就如下圖所示:

PHP實作多個檔案上傳的簡單方法有哪些? (圖文+影片)

PHP實作多個檔案上傳的簡單方法有哪些? (圖文+影片)

此時已經成功實作多個檔案上傳的操作了。

第二種方法:利用HTML5中的multiple方法

上傳多檔案的HTML介面的程式碼範例如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="upload.php" method="post" enctype="multipart/form-data">
 选择文件进行上传: <input type="file" name="file[]" multiple=""><br>
    <input type="submit" value="上传">
</form>
</body>
</html>

此段程式碼效果如下圖:

PHP實作多個檔案上傳的簡單方法有哪些? (圖文+影片)

#在這裡的form表單中我們用到了HTML 5中的multiple 屬性,這個屬性表示輸入欄位可選擇多個值,也就是選擇該屬性時,此欄位可以接受多個值。 multiple是我們實作多檔案上傳的一個重要屬性。同時我們將input中name名設定為一個file[] 陣列。

那麼我們再選擇多個檔案上傳,如下圖:

PHP實作多個檔案上傳的簡單方法有哪些? (圖文+影片)

PHP實作多個檔案上傳的簡單方法有哪些? (圖文+影片)

#如圖我們選擇了三張圖片,然後再用以下upload.php檔來接收三個資料。

upload.php程式碼範例如下:

<?php
echo "<pre class="brush:php;toolbar:false">";
var_dump($_FILES);
$files = [];
foreach ($_FILES as $fileInfo) {
    $files[] = upload_file($fileInfo);
}
var_dump($files);
function upload_file($fileInfo, $upload = "./upload", $imagesExt = ['gif', 'png', 'jpg'])
{
    if ($fileInfo['error'] === 0) {
        $ext = strtolower(pathinfo($fileInfo['name'], PATHINFO_EXTENSION));
        if (!in_array($ext, $imagesExt)) {
            return "文件非法类型";
        }
        if (!is_dir($upload)) {
            mkdir($upload, 0777, true);
        }
        $fileName = md5(uniqid(microtime(true), true)) . "." . $ext;
        $destName = $upload . "/" . $fileName;
        if (!move_uploaded_file($fileInfo['tmp_name'], $destName)) {
            return "文件上传失败!";
        }
        return "文件上传成功!";
    } else {
        switch ($fileInfo['error']) {
            case 1:
                echo '上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值';
                break;
            case 2:
                echo '上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值';
                break;
            case 3:
                echo '文件只有部分被上传';
                break;
            case 4:
                echo '没有文件被上传';
                break;
            case 6:
                echo '找不到临时文件夹';
                break;
            case 7:
                echo '文件写入失败';
                break;
        }
    }
}

此時上傳三張檔案後,透過瀏覽器訪問,結果如下圖:

PHP實作多個檔案上傳的簡單方法有哪些? (圖文+影片)

我們從圖中可以看到,上傳檔案資訊以三維數組形式展現,其中三個圖片的名稱、類型、臨時儲存的位置路徑、大小等等資訊都分別放在了一個數組中。

然而我們可以發現upload.php這個檔案中的資訊解析方法對於用multiple屬性上傳來的檔案並沒有產生效果。

那麼本篇文章就先給大家介紹PHP使用multiple屬性實現多文件上傳的這兩種簡單方法,在後續的文章中我們會繼續為大家詳細介紹,PHP實現多文件上傳及信息解析也就是第二種方法的詳解!

想了解更多PHP相關知識,大家可以關注PHP中文網PHP影片教學。歡迎大家來參考學習!

以上是PHP實作多個檔案上傳的簡單方法有哪些? (圖文+影片)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn