Этот вопрос закрыт для ответов, так как повторяет вопрос Как загрузить картинку на сервер php в папку?
HistoryART
@HistoryART
Надзиратель

Как загружать несколько изображений php, input file?

Добрый день.У меня есть скрипт который загружает одно изображение в папку,мне нужно загружать 25 и более,как это можно реализовать?(+ я буду заносить имена каждого изображения в базу mysql,но это позже).Спасибо заранее.

<!DOCTYPE html>
<html lang="en">
   <head>
      <title>Add img</title>
   </head>
   <body>
      <form method="post" enctype="multipart/form-data"> <input type="file" name="file"> <input type="submit" value="Загрузить файл!"> </form> 
      <?php 
      // если была произведена отправка формы 
      if(isset($_FILES['file'])) { 
      // проверяем, можно ли загружать изображение 
      $check = can_upload($_FILES['file']); if($check === true){ 
      // загружаем изображение на сервер 
      	make_upload($_FILES['file']); echo "<strong>Файл успешно загружен!</strong>"; 
      
      } 
      else	{ 
      // выводим сообщение об ошибке 
      echo "<strong>$check</strong>"; 
      
      } 
      
      }
      
      function can_upload($file){ 	
      // если имя пустое, значит файл не выбран 
      if($file['name'] == '') return 'Вы не выбрали файл.'; 	 
      	/* если размер файла 0, значит его не пропустили настройки 	сервера из-за того, что он слишком большой */ 	
      	if($file['size'] == 0) 		return 'Файл слишком большой.'; 	 
      		// разбиваем имя файла по точке и получаем массив 	
      		$getMime = explode('.', $file['name']); 	
      		// нас интересует последний элемент массива - расширение 	
      		$mime = strtolower(end($getMime)); 	
      		// объявим массив допустимых расширений 	
      		$types = array('jpg', 'png', 'gif', 'bmp', 'jpeg'); 	 	
      		// если расширение не входит в список допустимых - return 	
      		if(!in_array($mime, $types)) 		return 'Недопустимый тип файла.'; 	 	
      		return true; 
      		
      		} 
      		function make_upload($file){	 	
      		// формируем уникальное имя картинки: случайное число и name 
      			$name = $file['name']; 	copy($file['tmp_name'], dirname(__FILE__).'/' . $name);
      			echo $name;
      	 }
      
       ?>
   </body>
</html>
  • Вопрос задан
  • 2880 просмотров
Решения вопроса 2
Compolomus
@Compolomus Куратор тега PHP
Комполом-быдлокодер
$count = 5; // количество полей для загрузки файлов
$i = 0;
$path = './dir/'; // путь до папки куда сохранять, ./ считать от расположениея скрипта

if (!is_dir($path)) {
    mkdir($path, 0777, true);
}

?>
    <form action="?" enctype="multipart/form-data" method="post">
        <?php while (++$i <= $count) : ?>
            <div><input type="file" name="file[]"/></div>
        <?php endwhile; ?>
        <div><input type="submit" name="submit" value="submit"/></div>
    </form>
<?php

if (isset($_POST['submit']) && count($_FILES)) {
    for ($i = 0; $i <= $count; $i++) {
        $newnames = [];
        if (!empty($_FILES['file']['name'][$i])) {
            if ($info = getimagesize($_FILES['file']['tmp_name'][$i])) {
                $image = imagecreatefromstring(file_get_contents($_FILES['file']['tmp_name'][$i]));
                $name = explode('.', $_FILES['file']['name'][$i]);
                // обработка и сохранение
                $newname = $path . time() . $name[0] . '.png'; // это имя для базы, даже путь полный, только имя можно получить например через basename();
                $newnames[] = $newname; // basename($name);
                imagepng($image, $newname, 9 , PNG_ALL_FILTERS);

            } else {
                echo '<h2>Какой то левый файл ' . $_FILES['file']['name'][$i] . '</h2>';
            }
        } else {
            continue;
        }
        echo '<pre>' . print_r($newnames, true) . '</pre>';
    }
} else {
    echo '<h2>Ни чего не выбрано</h2>';
}
Ответ написан
AleksandrB
@AleksandrB
Совсем недавно вывел "Hello world"
Для загрузки нескольких файлов используется multiple
В качестве имени используется массив, тогда файлы будут передаваться в массиве
<input multiple type="file" name="files[]">

Но PHP принимает их не совсем в красивом виде, для того что бы проще было с ними работать используйте:
фукнцию

Вариантов функции есть много, это первая попавшаяся.
function incoming_files() {
    $files = $_FILES;
    $files2 = [];
    foreach ($files as $input => $infoArr) {
        $filesByInput = [];
        foreach ($infoArr as $key => $valueArr) {
            if (is_array($valueArr)) { // file input "multiple"
                foreach($valueArr as $i=>$value) {
                    $filesByInput[$i][$key] = $value;
                }
            }
            else { // -> string, normal file input
                $filesByInput[] = $infoArr;
                break;
            }
        }
        $files2 = array_merge($files2,$filesByInput);
    }
    $files3 = [];
    foreach($files2 as $file) { // let's filter empty & errors
        if (!$file['error']) $files3[] = $file;
    }
    return $files3;
}
Источник

И не забывайте про безопасность ;-)
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Eridani
@Eridani
Мимо проходил
<input type="file" name="file" multiple>
Ответ написан
Ваш ответ на вопрос

Вопрос закрыт для ответов и комментариев

Потому что уже есть похожий вопрос.
Похожие вопросы