【问题标题】:Incremental Backups / Versioned backups using PHP使用 PHP 的增量备份/版本化备份
【发布时间】:2011-03-02 03:14:25
【问题描述】:

我正在尝试将包含多个文件夹和文件的文件夹备份到远程位置(将上传压缩文件)。是否有任何现有的脚本可以帮助我,它检查文件是否在上次备份日期之后被修改,并且只备份在那之后创建/修改的文件?

目前数据大小在1gb左右,预计每个月增加50mb-200mb

另外,提取特定日期文件状态的最佳方法是什么?

【问题讨论】:

  • 必须是PHP吗?您可以访问 Linux 或 Windows 命令行吗?我确信 PHP 中有解决方案,但其他语言中有更多、更灵活、更稳定的解决方案(例如 rsync)。
  • rsync 肯定会工作,但我会建议使用gitmercurial 或类似的方法来完成工作。
  • @Pekka,我正在寻找基于 PHP 的解决方案,因为这需要在共享主机上运行。 rsync 绝对是此类事情的最佳选择,但我一直在寻找可以在共享主机上无缝运行的东西。
  • @Dogbert 你找到任何 PHP 解决方案了吗?

标签: php backup


【解决方案1】:
【解决方案2】:

我会为此使用 Subversion。如果您在远程系统上有一个 shell,那么使用 cron 作业很容易做到这一点。

如果您有一个共享主机,那么您可以通过 sftp/ftp 自动执行此过程,方法是安装远程驱动器(可能使用保险丝),然后通过 cron 作业运行 svn commit

【讨论】:

    【解决方案3】:

    你可以从php调用/执行rsync,rsync顾名思义就是同步到远程目录的命令。 rsync 的好处是它只添加新资源,只发送更新资源的差异,并删除源目录中没有的任何内容(如果你也想要的话)。 请注意,您没有增量备份。为此,您应该使用其他答案中所述的 VCS(Git、SVN 或 CVS)。

    这里是 a step by step rsync+php tutorial 用于在 php 中使用它

    【讨论】:

      【解决方案4】:

      我不认为这样的事情存在。

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

      然后对于找到的每个文件,您需要检查自上次备份以来该文件是否已被修改,如果已被修改,请将其添加到要备份的文件列表中。你可以这样做:

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

      最后,对于每个要备份的文件,您只需 copy()ftp_put() 修改文件的存档。

      【讨论】:

      【解决方案5】:

      你可以考虑rdiff-backup,而不是rsync。使用 rsync 技术,它能够进行增量远程备份。 Git 也可以这样做,但缺点是您无法从存储库中删除较旧的增量(由于 Gits 的性质)。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-05-05
        • 2014-02-24
        • 1970-01-01
        • 1970-01-01
        • 2016-05-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多