我试图将包含多个文件夹和文件的文件夹备份到远程位置(将上传压缩文件)。是否有任何现有的脚本可以帮助我,它检查文件是否在上次备份日期之后被修改,并且仅备份在此之后创建/修改的文件?增量备份/版本备份使用PHP
数据的当前大小为1GB左右,我希望加入50MB-200MB每个月
而且,这将是提取特定日期的文件的状态的最好方法?
我试图将包含多个文件夹和文件的文件夹备份到远程位置(将上传压缩文件)。是否有任何现有的脚本可以帮助我,它检查文件是否在上次备份日期之后被修改,并且仅备份在此之后创建/修改的文件?增量备份/版本备份使用PHP
数据的当前大小为1GB左右,我希望加入50MB-200MB每个月
而且,这将是提取特定日期的文件的状态的最好方法?
我不认为这样的事情存在。
首先,您需要一些递归函数来查找目录中的所有文件和所有子目录。这个问题有很多例子。我们的想法是使用SCANDIR()函数递归
然后找到的每个文件,你需要检查文件是否已自上次备份后修改,如果被修改,广告它要备份的文件列表。你可以这样做:
if (filemtime($filename) > $last_backup_time)
{
$files_to_backup[] = $filename;
}
最后,对每个文件进行备份,你只需要副本()或ftp_put()修改过的文件的归档。
来自SPL的RecursiveDirectoryIterator比递归的scandir调用要好得多;) http://stackoverflow.com/questions/2418068/php-spl-recursivedirectoryiterator-recursiveiteratoriterator-retrieving-the-full – 2010-06-18 12:31:03
你也可以执行rdiff那也是命令。请参阅http://en.wikipedia.org/wiki/Rsync#Variations – redben 2010-06-18 18:37:40
我会为此使用Subversion。如果你在远程系统上有一个shell,那么使用cron作业很容易做到这一点。
如果你有一个共享主机,那么你可以通过安装远程驱动器(可能带有保险丝)通过sftp/ftp自动执行此过程,然后通过cron作业运行svn commit
。
您可以致电/从PHP执行的rsync,rsync的是,同步到远程目录,正如其名称所暗示的命令。关于rsync的好处是,它只添加新资源,只发送更新资源上的差异,并删除不在源目录中的任何内容(如果你也想要的话)。 请注意,由此您没有增量备份。为此,您应该使用其他答案中所述的VCS(Git,SVN或CVS)。
这里是a step by step rsync+php tutorial使用它从PHP
而不是rsync的范围内,你可以考虑rdiff-backup。使用rsync技术,它可以进行增量远程备份。 Git也可以这样做,但缺点是不能从存储库中删除旧的增量(由于Gits性质)。
我不明白你为什么要编写自己的解决方案,而其他优秀的解决方案已经存在。
它需要是PHP吗?你有权访问Linux或Windows命令行吗?我确信PHP中有这样的解决方案,但其他语言中有更多,更灵活和更稳定的解决方案(例如'rsync')。 – 2010-06-10 11:38:41
'rsync'肯定会工作,但我会建议使用'git','mercurial'或类似工具来完成工作。 – 2010-06-10 11:53:46
@Pekka,我特别寻找基于PHP的解决方案,因为这需要在共享主机上运行。'rsync'无疑是最好的选择,但我一直在寻找可以在共享主机上无缝运行的东西。 – Dogbert 2010-06-10 12:11:56