11-1
多檔上傳
- 假設 file 欄位名稱為
files
,多檔上傳的name
屬性必須加上[]
及multiple
屬性,如:
<input type="file" name="files[]" id="files" class="form-control" placeholder="請上傳相片或影片"
accept=".jpg,.jpeg,.png,.gif,.mp4" multiple />
$_FILES
超級全域變數會變成像這樣(三維陣列):
$_FILES['files']['name'][0]
:第一個檔案原始名稱
$_FILES['files']['name'][1]
:第二個檔案原始名稱
- 上傳的步驟:利用迴圈,依序讀出每一個檔案,重點在於其索引值,也就是第幾個檔案的意思,所以每個
$_FILES
後面都要加上[$i]
,例如:
// 依序讀出檔案
foreach ($_FILES['files']['name'] as $i => $filename) {
// 若沒檔案就中斷
if (!$filename) {
break;
}
// 檢查檔案是否上傳成功
if ($_FILES['files']['error'][$i] === UPLOAD_ERR_OK) {
// 讓檔案放在文章編號的目錄下,比較方便管理,檢查有無該目錄
if (!is_dir(_PATH . "/uploads/{$id}")) {
// 若無建立原檔目錄
mkdir(_PATH . "/uploads/{$id}");
// 順便建立縮圖目錄
mkdir(_PATH . "/uploads/{$id}/thumbs");
}
// 暫存檔來源
$file = $_FILES['files']['tmp_name'][$i];
// 欲放置到哪裡
$dest = _PATH . "/uploads/{$id}/{$filename}";
// 將檔案移至指定位置
if (!move_uploaded_file($file, $dest)) {
die("無法將檔案{$file}上傳至指定位置{$dest}");
}
} else {
die("上傳錯誤:{$_FILES['files']['error'][$i]}");
}
}
- 最後可以試試一次上傳多檔
- 看看資料夾下是否有相關檔案