#php #file-upload #temporary-files
#php #загрузка файла #временные файлы
Вопрос:
Возможно ли сохранить загруженный файл с помощью move_uploaded_file
в каталог и пометить его для удаления через несколько минут? Я пытаюсь заставить временный файл оставаться на сервере через определенный промежуток времени, после чего он будет удален (только если он не обрабатывается с помощью), поэтому, когда файл был загружен и перемещен в каталог, если он не был обработан (не беспокойтесь об этой части, это сделаю я), он должен удалить файл с сервера.
Вы не можете сохранить временный файл на сервере (без использования move_uploaded_file
), поэтому он в основном хранится в tmp
каталоге на сервере. Как я могу сохранить файл при загрузке во временный каталог (или перемещении в каталог) и «пометить» его для последующего удаления, если он не будет обработан.
Я пытался исследовать, как это возможно, но я не нашел ни одного типа вопросов / тем о том, как создать временный файл, который останется после истечения определенного периода времени.
РЕДАКТИРОВАТЬ: Чтобы уточнить, я не хочу, чтобы файл удалялся после завершения выполнения скрипта после загрузки.
Ответ №1:
Выполните следующие действия:
Сначала используйте обычную функцию move_upload_file и сохраните файл на своем сервере.
Теперь создайте новую php-программу для этого:
- используйте функцию filetime, чтобы определить время последнего редактирования файла. Таким образом, вы можете проверить, обрабатывался ли он недавно.
- Сравните дату / время, указанные выше, с вашими критериями удаления.
- Используйте функцию php unlink, чтобы избавиться от старых файлов.
Теперь запускайте вышеуказанную программу как cron один раз в день.
Ответ №2:
Автоматического способа не существует. Некоторые серверы регулярно очищают файлы в каталоге /tmp через определенный промежуток времени, но единственный способ, которым вы могли бы быть уверены, — это написать свой собственный скрипт очистки и запустить его как задание cron. (Или используйте cron для бедных и попросите свои скрипты запустить проверку очистки, менее надежный, но иногда жизнеспособный метод.)
Вы можете либо указать время истечения срока действия файлов в базе данных или текстовом файле, либо просто использовать временную метку файловой системы для проверки наличия файлов с истекшим сроком действия.
Более сложным решением было бы переместить файл в какой-нибудь кэш, например Redis, где вы можете установить время истечения срока действия (TTL), но это будет зависеть от того, какие данные вы храните, и является несколько эзотерическим решением.
Ответ №3:
У меня есть другой метод, который я использую. Я перемещаю файл во временное местоположение. После обработки он не будет удален в установленное время. Скорее всего, при следующем запуске скрипта он удалит все ранее загруженные и обработанные файлы. Это позволяет избежать требований к заданиям cron. Устранение небольшой головной боли.