2010-06-10 85 views
4

我試圖將包含多個文件夾和文件的文件夾備份到遠程位置(將上傳壓縮文件)。是否有任何現有的腳本可以幫助我,它檢查文件是否在上次備份日期之後被修改,並且僅備份在此之後創建/修改的文件?增量備份/版本備份使用PHP

數據的當前大小爲1GB左右,我希望加入50MB-200MB每個月

而且,這將是提取特定日期的文件的狀態的最好方法?

+7

它需要是PHP嗎?你有權訪問Linux或Windows命令行嗎?我確信PHP中有這樣的解決方案,但其他語言中有更多,更靈活和更穩定的解決方案(例如'rsync')。 – 2010-06-10 11:38:41

+4

'rsync'肯定會工作,但我會建議使用'git','mercurial'或類似工具來完成工作。 – 2010-06-10 11:53:46

+0

@Pekka,我特別尋找基於PHP的解決方案,因爲這需要在共享主機上運行。'rsync'無疑是最好的選擇,但我一直在尋找可以在共享主機上無縫運行的東西。 – Dogbert 2010-06-10 12:11:56

回答

1

我不認爲這樣的事情存在。

首先,您需要一些遞歸函數來查找目錄中的所有文件和所有子目錄。這個問題有很多例子。我們的想法是使用SCANDIR()函數遞歸

然後找到的每個文件,你需要檢查文件是否已自上次備份後修改,如果被修改,廣告它要備份的文件列表。你可以這樣做:

if (filemtime($filename) > $last_backup_time) 
{ 
    $files_to_backup[] = $filename; 
} 

最後,對每個文件進行備份,你只需要副本()ftp_put()修改過的文件的歸檔。

+1

來自SPL的RecursiveDirectoryIterator比遞歸的scandir調用要好得多;) http://stackoverflow.com/questions/2418068/php-spl-recursivedirectoryiterator-recursiveiteratoriterator-retrieving-the-full – 2010-06-18 12:31:03

+0

你也可以執行rdiff那也是命令。請參閱http://en.wikipedia.org/wiki/Rsync#Variations – redben 2010-06-18 18:37:40

2

我會爲此使用Subversion。如果你在遠程系統上有一個shell,那麼使用cron作業很容易做到這一點。

如果你有一個共享主機,那麼你可以通過安裝遠程驅動器(可能帶有保險絲)通過sftp/ftp自動執行此過程,然後通過cron作業運行svn commit

2

您可以致電/從PHP執行的rsync,rsync的是,同步到遠程目錄,正如其名稱所暗示的命令。關於rsync的好處是,它只添加新資源,只發送更新資源上的差異,並刪除不在源目錄中的任何內容(如果你也想要的話)。 請注意,由此您沒有增量備份。爲此,您應該使用其他答案中所述的VCS(Git,SVN或CVS)。

這裏是a step by step rsync+php tutorial使用它從PHP

0

而不是rsync的範圍內,你可以考慮rdiff-backup。使用rsync技術,它可以進行增量遠程備份。 Git也可以這樣做,但缺點是不能從存儲庫中刪除舊的增量(由於Gits性質)。

我不明白你爲什麼要編寫自己的解決方案,而其他優秀的解決方案已經存在。