Mengunduh file terbaru dari server jauh tanpa mengunduh file sebelumnya

Saya mencoba mengunduh file terbaru yang diunggah ke server melalui SFTP. Informasi file disimpan dalam tabel setelah diunduh, dengan informasi yang mencakup checksum md5, stempel waktu, nama file, dll.

Skrip berjalan sebagai tugas cron dan aktif beberapa kali sehari untuk mengambil file baru dari sekumpulan server. Biasanya jumlah filenya sedikit, jadi mudah untuk mendownload semuanya, meng-hash isinya, dan membandingkan hasilnya dengan apa yang ada di database untuk menentukan apakah suatu file baru.

Namun, kami sekarang memiliki server yang diakses yang tidak menghapus konten apa pun. Jadi, mengunduh dan melakukan hashing semuanya terlalu mahal. Tampaknya satu-satunya pilihan adalah menilai metadata file dari jarak jauh dan menggunakannya untuk menentukan apakah file tersebut baru.

Salah satu solusi yang saya pikir mungkin berhasil adalah dengan menggunakan mtime atau ctime dari file jarak jauh untuk dibandingkan dengan stempel waktu terbaru yang disimpan dalam tabel file. Skrip kemudian hanya akan mengunduh file dengan mtime atau ctime lebih besar dari stempel waktu terakhir yang tercatat (bersumber dari unduhan terakhir). Namun, mtime dan ctime tidak mengacu pada waktu pengunggahan. Jadi, kasus yang lebih buruk, sebuah file dapat diunggah setelah cron terakhir dijalankan yang memiliki mtime atau ctime kurang dari stempel waktu yang terakhir direkam.

Solusi lain yang saya pertimbangkan adalah memperlakukan nama file dan stempel waktu sebagai semacam kunci komposit dan membandingkan kedua atribut ini dengan entri dalam tabel file. Saya tidak yakin apakah ini ide yang valid atau aman. Nama filenya cukup unik, jadi mungkin ini bisa berhasil. Saya benar-benar mencari cara teraman dalam hal menghindari file yang terlewat.

Script yang sebenarnya melakukan pengaksesan sebagian besar ditulis menggunakan perpustakaan sftp phpseclib.

Saya tidak memiliki akses ssh, jadi checksum jarak jauh tidak dapat dilakukan.

Wawasan apa pun akan sangat dihargai.

Terima kasih


person jonnywalkerr    schedule 28.05.2015    source sumber
comment
Saya kira Anda juga bisa melakukan ukuran file. Apakah Anda bertanya tentang cara mendapatkan info tersebut dengan phpseclib atau apakah sebaiknya memanfaatkan info tersebut dengan cara itu?   -  person neubert    schedule 29.05.2015


Jawaban (1)


Anda menjawab sendiri pertanyaan Anda.

Kumpulkan nama file, waktu modifikasi, dan ukuran file jarak jauh. Simpan di database. Dan lain kali, kumpulkan metadata yang sama dan bandingkan dengan proses sebelumnya. Itu hal terbaik yang dapat Anda lakukan.

Sangat kecil kemungkinannya konten file berubah, tanpa mengubah stempel waktu atau ukuran file.


Tentu saja kecuali menghitung file checksum. Tapi phpseclib tidak mendukung itu. Dan sebagian besar server SFTP (khususnya OpenSSH) juga tidak melakukan hal tersebut.
Lihat Bagaimana cara melakukan checksum selama transfer file SFTP untuk integritas data?

person Martin Prikryl    schedule 29.05.2015