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

#php #file-upload #temporary-files

#php #загрузка файла #временные файлы

Вопрос:

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

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

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

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

Ответ №1:

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

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

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

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

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

Ответ №2:

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

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

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

Ответ №3:

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