使用PHP进行增量备份/版本化备份

4
我正在尝试备份一个包含多个文件夹和文件的文件夹到远程位置(将上传压缩文件)。是否有任何现有的脚本可以帮助我检查文件是否在上次备份日期之后被修改,并且只备份在此之后创建/修改的文件?当前数据大小约为1GB,每个月预计增加50MB-200MB。
另外,在特定日期提取文件状态的最佳方法是什么?

7
需要使用PHP吗?您是否能够访问Linux或Windows命令行?我相信有PHP的解决方案,但是其他语言(例如rsync)有更多、更灵活和更稳定的解决方案。 - Pekka
4
“rsync”肯定能用,但我建议使用“git”、“mercurial”或类似工具来完成工作。 - Lieven Keersmaekers
@Pekka,我特别想找基于PHP的解决方案,因为这需要在共享主机上运行。rsync绝对是这些东西中最好的,但我正在寻找能够在共享主机上无缝运行的东西。 - Dogbert
@Dogbert 你找到任何 PHP 解决方案了吗? - EmptyData
5个回答


2
我会选择使用Subversion来完成这个任务。如果你在远程系统上有一个shell,那么使用cron job很容易实现。
如果你使用的是共享主机,则可以通过挂载远程驱动器(可能需要使用fuse)并通过cron job运行“svn commit”来自动化此过程。

2
您可以从php中调用/执行rsync,rsync是一种同步到远程目录的命令,正如其名称所示。rsync的好处在于它只添加新资源,仅发送更新资源的差异,并删除源目录上不存在的任何内容(如果您也希望这样做)。 请注意,这样做不会有增量备份。为此,您应该使用VCS(Git、SVN或CVS),如其他答案中所述。
以下是一个逐步rsync+php教程,可在php内部使用:链接

1

我认为没有类似的东西存在。

首先,您需要一些递归函数来查找目录中的所有文件和所有子目录。有很多这种问题的示例。思路是递归使用scandir()函数

然后对于找到的每个文件,您需要检查该文件是否自上次备份以来已被修改,如果已被修改,则将其添加到备份文件列表中。您可以执行以下操作:

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

最后,对于每个需要备份的文件,您只需使用copy()ftp_put()函数复制或上传修改后的文件归档。


1
RecursiveDirectoryIterator是SPL中比递归scandir调用更好的方式 ;) - Tobias P.
您也可以执行rdiff命令来完成这个操作。请参阅http://en.wikipedia.org/wiki/Rsync#Variations。 - redben

1

你可以考虑使用rdiff-backup代替rsync。它使用rsync技术,能够进行增量远程备份。Git也可以实现这一点,但缺点是你无法从仓库中删除旧的增量备份(因为Git的本质)。

我不明白为什么要自己编写解决方案,而其他优秀的解决方案已经存在。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接