两台服务器之间的差异图像

时间:2013-08-08 05:56:50

标签: php linux diff

我有2台服务器serv1和serv2,需要比较这2台服务器中的图像,以检测哪些文件丢失或被修改过。

到目前为止,我有3个选项:

- 使用PHP创建API

  • 我创建了一个API文件,它将返回serv1 / www / app / images /
  • 中的所有图像
  • 获取每张图片的修改时间
  • 以json
  • 的形式返回结果
  • 输出是这样的:{'path / to / file':123232433422}
  • 我在serv2中获取,解码然后将数组合并到serv2 / www / app / images中的图像
  • 获取array_diff,工作正常

缺点: - 花费大量时间(提取,解码,合并,循环,比较......)

- 使用rsync

  • 干运行以获取serv1中存在但在serv2中丢失或修改的图像列表(非常快:):)
缺点:

  • apache无法运行ssh,因为它无权访问〜/ .ssh /
  • 需要授予apache权限,但我的客户不需要它
  • 所以简而言之,我不能使用任何需要许可的内容

- 也许我可以使用一些图书馆或供应商,但我怀疑我的客户会允许我。如果它可以是shell脚本或php内置函数,我会尽可能地执行它。

所以我的问题是,是否有其他方法可以获取这些图像的图像和修改日期而无需身份验证?我的第一个解决方案是好的,如果它可以被优化导致如果数组太大,则需要花费很多时间。

我希望解决方案可以用PHP或Shell脚本完成。

请帮助给我更多选择。感谢

1 个答案:

答案 0 :(得分:0)

在两台服务器上安装实用程序md5deep(或sha1deep)。

在第一台服务器上执行md5deep并将结果保存到文本文件:

user@server1> md5deep -l -r mydir > server1.txt

结果文件如下所示:

e7c3fcf5ad7583012379ec49e9a47b28  .\a\file1.php
2ef76c2ecaefba21b395c6b0c6af7314  .\b\file2.txt
45e19bb4b38d529d6310946966f4df12  .\c\file3.bin
...

然后,将文件server1.txt复制到第二台服务器并以负匹配模式运行md5deep

md5deep -l -r -X server1.txt mydir

这将打印第二台服务器上与第一台服务器不同的所有文件的校验和和名称。

或者,您可以使用diff或类似实用程序自己比较md5deep -l -r dir创建的文本文件。

最后一点 - 在每台服务器上简单地在cron中运行md5deep -l -r mydir | gzip > md5deep.txt.gz可能更容易,这样您就可以将文件列表与每台服务器上的校验和进行比较(gzip,以便快速获取)。