php - временная папка сессии - PullRequest
2 голосов
/ 29 октября 2011

Идея такова:

  1. Пользователь загружает файл (ы) в какую-либо временную папку, которая существует только для текущего сеанса.
  2. Регистры пользователя
  3. Файлы из "временной" папки перемещаются в постоянную папку, также называемую хранилищем.

Я могу сделать что-то вроде этого:

mkdir('tempfiles/'.session_id(), 777)

И загрузить файлы:

if (move_uploaded_file($_FILES['my_files']['tmp_name'], 'tempfiles/'.session_id().'/')) {
  // echo "success";
}

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

/* some function to empty dir */
rmdir('tempfiles/'.session_id())

Проблема : Что делать, если пользователь после загрузкине регистрируется?Как удалить временную папку?

С помощью функции tempnam я могу создать папку, которая "удалит ее самостоятельно" .. но на сервере Windows я не могу создать, например, tempnam('/tmp/test', '');, просто установите 3 символапрефикс: C:\Windows\Temp\pre569E.tmp

Моя единственная идея - записать в базу данных путь временных папок.

Любая помощь будет приветствоваться.

1 Ответ

2 голосов
/ 29 октября 2011

Если пользователь не регистрируется, вам придется вручную войти и очистить эти файлы. PHP будет автоматически очищать загрузку, только если вы оставили исходный временный файл в покое. Поскольку вы явно переместили его из временного каталога загрузки, это означает, что вы должны очистить его.

Вы не можете rmdir не пустой каталог. Сначала вы должны удалить все файлы в этом каталоге. Простейшим способом было бы сделать

$files = glob('tempfiles/' . session_id());
foreach($files as $file) {
   unlink($file);
}

Еще проще НЕ создавать подкаталог для каждого пользователя. Переместите файл из временного каталога выгрузки (чтобы PHP не выполнял его автоматическую очистку) и сохраните его в ДРУГОЙ одиночной промежуточной директории с именем session_id (). Это ограничивает каждого незарегистрированного пользователя одним файлом, хранящимся в аббатстве, но это, вероятно, хорошая вещь. Все файлы пользователей будут смешаны, но поскольку каждый из них имеет уникальное имя, основанное на сеансе, конфликт отсутствует.

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

...