У меня проблемы с моим приложением. Сценарий заключается в том, что существует php cron, который запускается каждую минуту и обрабатывает папку загрузок, в которой файлы загружаются через ftp-сервер (vsftpd). Если сервер загружает файл размером 1 ГБ, php cron обработает файлы, даже если он загружен не полностью. Я не могу изменить время cron, но я хочу знать, есть ли у vsftpd какая-либо функция, с помощью которой можно загрузить файл в /tmp
а затем перейти в исходную папку после завершения загрузки?
Нет, в нем нет встроенной функции.
Однако есть решения для этого.
Вероятно, лучше всего сказать программе загрузки, чтобы она загружала ее под другим именем, например file-whatever.txt.incomplete
и после завершения загрузки переименуйте его в обычное имя.
Преимущество:
Переименование происходит быстро (поскольку файл находится в той же файловой системе).
Если загрузка завершается некорректно, она не переименовывается.
Недостаток, конечно, вам нужны изменения как в процессе загрузки, так и в PHP cronjob (игнорировать *.incomplete
файлы).
Другое решение - загрузить его в другую папку, как вы предложили, и посмотреть что-то вроде Incron.
Благодаря этому вы можете просматривать папку и перемещать готовые файлы в другую папку.
Недостаток: если загрузка не удалась на полпути, она все равно будет перемещена и, возможно, обработана.