Вы пытаетесь загрузить несколько файлов одновременно? Вот как реализовать загрузку нескольких файлов с использованием HTML и PHP.
В этой статье я собираюсь показать, как использовать один HTML-файл для загрузки нескольких файлов. В дополнение к этому я продемонстрирую использование нескольких файловых входов с дополнительными полями ввода.
Реализация загрузки нескольких файлов
Во-первых, вам нужно создать HTML- форму с атрибутом enctype = ‘multiple / form-data’ . Фактически, атрибут enctype указывает, как данные формы должны быть закодированы при отправке их на сервер. Когда вы используете формы, которые имеют элемент управления загрузкой файлов, вам нужно указать enctype как множественные / form-data .
Если вы используете ввод одного файла, вам нужно включить элемент file для выбора нескольких файлов. Чтобы сделать это, вам нужно назвать входной файл в виде массива, например. имя = “файлы []” . Кроме того, элемент «Файл ввода» должен иметь несколько = «несколько» или просто несколько.
Форма HTML будет выглядеть следующим образом:
<form action="" method="post" enctype="multipart/form-data">
<label> Select Files: </label>
<input type="file" name="fileUpload[]" multiple >
<input type="submit" name="Submit" value="Upload" >
</form>
Когда пользователь отправляет форму после выбора файлов, мы можем обработать форму с помощью простых фрагментов PHP следующим образом:
<?php
// Set Upload Path
$target_dir = 'files/';
if( isset($_FILES['fileUpload']['name'])) {
$total_files = count($_FILES['fileUpload']['name']);
for($key = 0; $key < $total_files; $key++) {
// Check if file is selected
if(isset($_FILES['fileUpload']['name'][$key])
&& $_FILES['fileUpload']['size'][$key] > 0) {
$original_filename = $_FILES['fileUpload']['name'][$key];
$target = $target_dir . basename($original_filename);
$tmp = $_FILES['fileUpload']['tmp_name'][$key];
move_uploaded_file($tmp, $target);
}
}
}
?>
Проверка типа файла и размера файла
Вы можете ограничить тип файла, проверив расширение загруженного файла с помощью набора разрешенных расширений. Следующий код проверяет правильность файла изображения.
// Get the extension
$ext = strtolower(pathinfo($_FILES["fileUpload"]["name"][$key], PATHINFO_EXTENSION));
// check extension and upload
if( in_array( $ext, array('jpg', 'jpeg', 'png', 'gif', 'bmp'))) {
// Filetype if valid, process uploading
}Чтобы проверить размер файла, вы можете использовать $ _FILES [‘image’] [‘size’] следующим образом:
$maxFileSize = 5 * 1024 * 1024; //5MB
$errors = array();
if($_FILES['fileUpload']['size'][$key] > $maxFileSize){
$errors[$key] = 'File size is greater than allowed size';
}
Кроме того, вы также можете переименовать имя файла перед загрузкой. Вот как заменить пробелы в имени файла на подчеркивание и добавить метку времени к имени файла.
if(isset($_FILES['fileUpload']['name'][$key])
&& $_FILES['fileUpload']['size'][$key] > 0) {
$original_filename = $_FILES['fileUpload']['name'][$key];
// Get the fileextension
$ext = pathinfo($original_filename, PATHINFO_EXTENSION);
// Get filename without extesion
$filename_without_ext = basename($original_filename, '.'.$ext);
// Generate new filename
$new_filename = str_replace(' ', '_', $filename_without_ext) . '_' . time() . '.' . $ext;
// Upload the file with new name
move_uploaded_file($_FILES['fileUpload']['tmp_name'][$key], $target_dir . $new_filename);
}
Загрузка нескольких файлов с дополнительной информацией
Иногда требуется загрузить несколько файлов с дополнительной информацией, такой как заголовок, описание и т.д. В таких случаях вам необходимо использовать несколько элементов управления вводом файлов.
На приведенном выше снимке экрана каждый входной файл имеет соответствующий заголовок. Вот пример HTML.
<form action="" method="post" enctype="multipart/form-data">
<input type="text" name="title[]" placeholder="Title" >
<input type="file" name="fileUpload[]" >
<input type="text" name="title[]" placeholder="Title" >
<input type="file" name="fileUpload[]" >
<input type="text" name="title[]" placeholder="Title" >
<input type="file" name="fileUpload[]" >
<input type="text" name="title[]" placeholder="Title" >
<input type="file" name="fileUpload[]" >
<input type="submit" name="Submit" value="Upload" >
</form>
Как видите, есть несколько элементов управления вводом текста и файлов. Добавляя ‘[]’ к вашим именам входных элементов, входные элементы будут передаваться как массивы.
Когда вы отправляете вышеуказанную форму, $ _POST [‘title’] будет массивом. Сопоставляя индекс массива $ _POST [‘title’] с $ _FILES [‘fileUpload’] [‘name’], вы можете получить соответствующий заголовок, пару имен файлов. Например, $ _POST [‘title’] [0] – это заголовок файла $ _FILES [‘fileUpload’] [‘name’] [0] и так далее.
Таким образом, вы можете реализовать несколько загрузок файлов с использованием HTML и PHP.
Источник записи: https://thedebuggers.com
