Я пытаюсь загрузить последние файлы, загруженные на сервер через SFTP. Информация о файле сохраняется в таблице после загрузки с информацией, которая включает контрольную сумму md5, метку времени, имя файла и т. д.
Скрипт запускается как задание cron и просыпается несколько раз в день, чтобы получить новые файлы с набора серверов. Обычно количество файлов невелико, поэтому можно просто загрузить все, хэшировать содержимое и сравнить результат с тем, что существует в базе данных, чтобы определить, является ли файл новым.
Однако теперь у нас есть доступ к серверу, который не очищает содержимое. Таким образом, скачивание и хеширование всего слишком дорого. Кажется, единственный вариант — удаленно оценить метаданные файла и использовать их, чтобы определить, является ли файл новым.
Одно из решений, которое, по моему мнению, могло бы сработать, состояло в том, чтобы использовать mtime или ctime удаленных файлов для сравнения с последней меткой времени, хранящейся в таблице файлов. Затем сценарий будет загружать только файлы с mtime или ctime, превышающим последнюю записанную отметку времени (полученную из последней загрузки). Однако mtime и ctime не относятся к времени загрузки. Таким образом, в худшем случае файл может быть загружен после последнего запуска cron, у которого mtime или ctime меньше, чем самая последняя записанная метка времени.
Другое решение, которое я рассматривал, заключается в обработке имени файла и метки времени как своего рода составного ключа и сравнении этих двух атрибутов с записями в таблице файлов. Я не уверен, что это правильная или безопасная идея. Имена файлов довольно уникальны, так что, возможно, это сработает. Я действительно ищу самую безопасную ставку с точки зрения предотвращения пропущенных файлов.
Сценарий, который фактически выполняет доступ, написан в основном с использованием библиотеки phpseclib sftp.
У меня нет доступа по ssh, поэтому удаленная контрольная сумма невозможна.
Мы будем очень признательны за любое понимание.
Спасибо