Загрузка последних файлов с удаленного сервера без загрузки предыдущих файлов

1

Я пытаюсь загрузить последние файлы, загруженные на сервер через SFTP. Информация о файле хранится в таблице после загрузки, с информацией, которая включает контрольную сумму md5, временную метку, имя файла и т.д.

Скрипт работает как задание cron и просыпается несколько раз в день, чтобы извлекать новые файлы из набора серверов. Как правило, количество файлов невелико, поэтому легко просто загрузить все, хеш-содержимое и сравнить результат с тем, что существует в базе данных, чтобы определить, является ли файл новым.

Однако теперь у нас есть доступ к серверу, который не очищает контент. Таким образом, загрузка и хеширование - все это слишком дорого. Кажется, единственный вариант - дистанционно оценить метаданные файлов и использовать это, чтобы определить, является ли файл новым.

Одно из решений, которое, как я думал, может работать, - использовать mtime или ctime удаленных файлов для сравнения с последней временной меткой, хранящейся в таблице файлов. Сценарий будет загружать только файлы с mtime или ctime больше, чем последняя записанная метка времени (полученная из последней загрузки). Однако mtime и ctime не относятся к времени загрузки. Таким образом, худший случай, файл может быть загружен после последнего прогона cron, который имеет mtime или ctime меньше, чем самая последняя записанная метка времени.

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

Сценарий, который фактически выполняет доступ, записывается в основном с использованием библиотеки phpeclib sftp.

У меня нет доступа ssh, поэтому удаленная контрольная сумма невозможна.

Любое понимание было бы весьма благодарным.

благодаря

  • 0
    Я думаю, вы могли бы сделать размер файла тоже. Вы спрашиваете о том, как получить эту информацию с помощью phpseclib, или просто рекомендуется использовать эту информацию таким образом?
Теги:
phpseclib
sftp

1 ответ

1
Лучший ответ

Вы сами ответили на свой вопрос.

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

Очень маловероятно, что содержимое файла изменяется без изменения временной отметки или размера файла.


Конечно, кроме расчета контрольной суммы файла. Но phpseclib этого не поддерживает. И большинство SFTP-серверов (в частности, OpenSSH) тоже.
См. Как выполнять контрольные суммы во время передачи файлов SFTP для целостности данных?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню