Хранить загруженные файлы на нескольких страницах - PullRequest
1 голос
/ 30 мая 2009

У меня есть страница, которая должна принимать файлы .csv без предопределенного макета. То есть пользователь сам выберет, какие данные есть в каждом столбце.

Прямо сейчас форма загрузки файла отправляет меня в скрипт .php, который может получить доступ к загруженному файлу. Он читает его и позволяет пользователю назначать категории для каждого из столбцов. Мой следующий шаг - скопировать данные из CSV-файла в базу данных, но я не уверен, как предотвратить удаление файла из временного каталога, он мне все еще нужен на следующей странице, где я делаю фактическое копирование , Кроме того, я не заинтересован в том, чтобы копировать файл в другое место на сервере, это, похоже, пустая трата времени, и было бы хлопотно сделать его правильно, учитывая параллелизм.

Как предотвратить удаление файла или, как вариант, как лучше решить эту проблему?

Ответы [ 2 ]

3 голосов
/ 30 мая 2009

Ну, я не уверен, что это можно исправить, не перемещая загруженный файл.

Лично я бы реализовал это так:

На странице, которая получает загруженный файл:

//assuming it hasn't already been started...
session_start();

//generate a unique filepath
$filepath = PATH_TO_THE_DIR . "/" . time() . 
"_" . md5_file($_FILES['formelement']['tmp_name']) . ".csv";

//move the uploaded file
move_uploaded_file($_FILES['formelement']['tmp_name'], $filepath);

//do whatever you need with the file, now at $filepath

//now store the filepath in the session:
$_SESSION['uploaded_filepath'] = $filepath;

session_write_close();

На второй странице, когда вы хотите сделать больше обработки:

//assuming it hasn't already been started...
session_start();

$filepath = $_SESSION['uploaded_filepath'];

// do whatever you need to with the file

unlink($filepath);

unset($_SESSION['uploaded_filepath']);

session_write_close();

Это должно быть хорошо - очевидно, вам нужно проверить разрешения для PATH_TO_THE_DIR константа, которая будет просто каталогом где-то.

2 голосов
/ 30 мая 2009

Вам нужно использовать move_uploaded_file. Там действительно нет способа скопировать его в другое место. И вам не стоит об этом беспокоиться, потому что подобные вещи не являются проблемой для любой файловой системы. Что касается параллелизма, я не вижу, как вы столкнетесь с проблемами в этом. Миллионы PHP-приложений прекрасно работают: -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...