Как создать временный загруженный файл и удалить его через некоторое время - PullRequest
1 голос
/ 11 июня 2011

Можно ли сохранить загруженный файл с помощью move_uploaded_file в каталоге и отметить его для удаления через несколько минут? Я пытаюсь сделать так, чтобы временный файл оставался на сервере через некоторое время, затем он будет удален (только если он не был обработан), поэтому, когда файл был загружен и перемещен в каталог, если он не был обработан не беспокойтесь об этой части, это будет сделано мной) она должна удалить файл с сервера.

Нет способа сохранить временный файл на сервере (без использования move_uploaded_file), поэтому в основном он хранится в каталоге tmp на сервере. Как сохранить файл при загрузке во временный каталог (или перемещении) в каталог) и "пометить" его для последующего удаления, если оно не обработано.

Я пытался выяснить, как это возможно, но я не нашел никаких вопросов / тем о том, как создать временный файл, чтобы остаться после определенного времени.

РЕДАКТИРОВАТЬ: Чтобы уточнить, я не хочу, чтобы файл был удален после завершения выполнения сценария после загрузки.

Ответы [ 3 ]

4 голосов
/ 11 июня 2011

Выполните следующие действия:

Сначала используйте обычную функцию move_upload_file и сохраните файл на своем сервере.

Теперь создайте новую программу php для этого:

  1. используйте функцию времени файла, чтобы определить время последнего редактирования файла. Таким образом, вы можете проверить, обрабатывался ли он недавно.
  2. Сравните вышеуказанную дату / время с критериями удаления.
  3. Используйте функцию php unlink, чтобы избавиться от старых файлов.

Теперь запускайте вышеуказанную программу как cron один раз в день.

2 голосов
/ 11 июня 2011

Там нет автоматического пути. Некоторые серверы регулярно удаляют файлы в каталоге / tmp по истечении определенного периода времени, но единственный способ убедиться в этом - написать свой собственный скрипт очистки и запустить его как задание cron. (Или используйте cron бедняка, чтобы ваши сценарии запускали проверку очистки, менее надежный, но иногда жизнеспособный метод.)

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

Более сложным решением было бы переместить файл в какой-то кэш, такой как Redis, где вы можете установить время истечения (TTL), но это будет зависеть от того, какие данные вы храните, и является несколько эзотерическим решением.

1 голос
/ 11 июня 2011

У меня есть другой метод, который я использую.Я перемещаю файл во временную папку.После обработки он не будет удален в установленное время.Скорее, при следующем запуске сценария он удалит все ранее загруженные и обработанные файлы.Это позволяет избежать требования заданий cron.Устранение небольшой головной боли.

...