leni_m
@leni_m
ЧупаКобрус

Как записать пути к файлам в массив, которые были загружены через форму?

Есть страничка html, подключил к ней js плагин на загрузку нескольких файлов перетаскиванием.
Думаю при загрузке файлов на сервер запомнить, какие файлы загрузил пользователь (далее будет отправка их на мыло).
Плагин закидывает по одному файлу на php обработчик, и я вот думал, что можно через сессию их все записать в один массив, но почему-то массив перезаписывается, а не добавляются новые пути.
вот код, который сейчас есть в обработчике:
<?php
function save_file($path) {
    if (empty($_SESSION['files'])) {
        session_start();
        $_SESSION['files'] = array();
    }
    array_push($_SESSION['files'], $path);
}
if($_SERVER['REQUEST_METHOD'] == 'POST') {
	if(!empty($_FILES['newfile'])) {
            $path = dirname(__FILE__).'/uploads/'.$_FILES['newfile']['name'];
		if(move_uploaded_file($_FILES['newfile']['tmp_name'],$path)){
                    save_file($path);
                    echo "OK";
		}
		else {
			echo 'error';
		}
	}
}
print_r ($_SESSION['files']);

из браузера скрин, кидаю 5 файлов и везде один элемент возвращает.
5af443a86f571520300726.png
  • Вопрос задан
  • 137 просмотров
Решения вопроса 1
@Merzley
Перенесите session_start() в начало файла. Дело в том, что до вызова session_start() переменной $_SESSION вообще не существует. Поэтому выполнение функции save_file() всегда выглядит так:
  • Пустая ли переменная $_SESSION['files'] - всегда да, т.к. переменной $_SESSION не существует
  • запускаем сессию - появляется переменная $_SESSION, в которой есть элемент ['files'], хранящий данные из прошлого запроса
  • очищаем элемент ['files'] - стирается всё, что приходило в прошлых запросах
  • помещаем туда данные текущего запроса

При последующих запросах всё повторяется, поэтому и получается, что в сессии только одна запись сохраняется
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы