การดาวน์โหลดไฟล์ล่าสุดจากเซิร์ฟเวอร์ระยะไกลโดยไม่ต้องดาวน์โหลดไฟล์ก่อนหน้า

ฉันกำลังพยายามดาวน์โหลดไฟล์ล่าสุดที่อัปโหลดไปยังเซิร์ฟเวอร์ผ่าน SFTP ข้อมูลไฟล์จะถูกจัดเก็บไว้ในตารางหลังจากดาวน์โหลด โดยมีข้อมูลที่รวมถึงการตรวจสอบ md5 การประทับเวลา ชื่อไฟล์ ฯลฯ

สคริปต์ทำงานเป็นงาน cron และปลุกสองครั้งต่อวันเพื่อดึงไฟล์ใหม่จากชุดเซิร์ฟเวอร์ โดยปกติแล้ว ไฟล์จะมีจำนวนน้อย ดังนั้นจึงเป็นเรื่องง่ายที่จะดาวน์โหลดทุกอย่าง แฮชเนื้อหา และเปรียบเทียบผลลัพธ์กับสิ่งที่มีอยู่ในฐานข้อมูลเพื่อดูว่าไฟล์นั้นเป็นไฟล์ใหม่หรือไม่

อย่างไรก็ตาม ขณะนี้เรามีการเข้าถึงเซิร์ฟเวอร์ที่ไม่ล้างเนื้อหาใดๆ ดังนั้นการดาวน์โหลดและการแฮชทุกอย่างจึงมีค่าใช้จ่ายสูงเกินไป ดูเหมือนว่าตัวเลือกเดียวคือประเมินข้อมูลเมตาของไฟล์จากระยะไกล และใช้สิ่งนี้เพื่อพิจารณาว่าไฟล์นั้นเป็นไฟล์ใหม่หรือไม่

วิธีแก้ปัญหาหนึ่งที่ฉันคิดว่าอาจใช้งานได้คือใช้ mtime หรือ ctime ของไฟล์ระยะไกลเพื่อเปรียบเทียบกับการประทับเวลาล่าสุดที่จัดเก็บไว้ในตารางไฟล์ จากนั้นสคริปต์จะดาวน์โหลดไฟล์ที่มีเวลา mtime หรือ ctime มากกว่าเวลาประทับที่บันทึกไว้ล่าสุดเท่านั้น (ที่มาจากการดาวน์โหลดครั้งล่าสุด) อย่างไรก็ตาม mtime และ ctime ไม่ได้อ้างอิงถึงเวลาอัพโหลด ดังนั้น กรณีที่แย่กว่านั้นคือ สามารถอัปโหลดไฟล์ได้หลังจากการรัน cron ครั้งล่าสุดที่มี mtime หรือ ctime น้อยกว่าการประทับเวลาล่าสุดที่บันทึกไว้

วิธีแก้ไขปัญหาอื่นที่ฉันพิจารณาคือถือว่าชื่อไฟล์และการประทับเวลาเหมือนกับคีย์ผสมและเปรียบเทียบแอตทริบิวต์ทั้งสองนี้กับรายการในตารางไฟล์ ฉันไม่แน่ใจว่านี่เป็นความคิดที่ถูกต้องหรือปลอดภัย ชื่อไฟล์ค่อนข้างมีเอกลักษณ์ ดังนั้นอาจจะใช้ได้ ฉันกำลังมองหาทางออกที่ปลอดภัยที่สุดในแง่ของการหลีกเลี่ยงไฟล์ที่ไม่ได้รับ

สคริปต์ที่เข้าถึงได้จริงนั้นส่วนใหญ่เขียนโดยใช้ไลบรารี phpseclib sftp

ฉันไม่มีสิทธิ์เข้าถึง ssh ดังนั้นจึงไม่สามารถตรวจสอบผลรวมระยะไกลได้

ข้อมูลเชิงลึกใด ๆ ที่จะได้รับการชื่นชมอย่างมาก

ขอบคุณ


person jonnywalkerr    schedule 28.05.2015    source แหล่งที่มา
comment
ฉันเดาว่าคุณสามารถปรับขนาดไฟล์ได้เช่นกัน คุณกำลังถามเกี่ยวกับวิธีการรับข้อมูลนั้นด้วย phpseclib หรือว่าเป็นความคิดที่ดีที่จะใช้ข้อมูลนั้นในลักษณะนั้น?   -  person neubert    schedule 29.05.2015


คำตอบ (1)


คุณตอบคำถามของคุณเอง

รวบรวมชื่อไฟล์ เวลาในการแก้ไข และขนาดของไฟล์ระยะไกล เก็บไว้ในฐานข้อมูล และในครั้งต่อไปให้รวบรวมข้อมูลเมตาเดียวกันและเปรียบเทียบกับการทำงานครั้งก่อน นั่นคือสิ่งที่ดีที่สุดที่คุณสามารถทำได้

ไม่น่าเป็นไปได้อย่างยิ่งที่เนื้อหาไฟล์จะเปลี่ยนแปลงโดยไม่เปลี่ยนการประทับเวลาหรือขนาดไฟล์


แน่นอนยกเว้นการคำนวณเช็คซัมของไฟล์ แต่ phpseclib ไม่รองรับสิ่งนั้น และเซิร์ฟเวอร์ SFTP ส่วนใหญ่ (โดยเฉพาะ OpenSSH) ก็ไม่ทำเช่นนั้น
ดู วิธีดำเนินการตรวจสอบผลรวมระหว่างการถ่ายโอนไฟล์ SFTP เพื่อความสมบูรณ์ของข้อมูล< /ก>

person Martin Prikryl    schedule 29.05.2015