好的,我可能不是第一个尝试创建基于PHP的rsync网络界面以便于部署的人,但是我们会继续努力。
我们有一个本地的‘QA’服务器和一个在Rackspace的‘Staging’服务器。我已经设置了SSH密钥对,所以我可以在两个服务器之间进行rsync,并且一切都很顺利。问题在于rsync在决定需要更新什么方面有些不稳定。
我编写的脚本首先使用‘--dry-run’参数执行rsync,以获取需要传输的所有内容的列表。命令如下:
$strCheck = shell_exec(
"rsync " .
"--verbose " .
"--recursive " .
"--safe-links " .
"--checksum " .
"--dry-run " .
"--delete " .
"--delete-excluded " .
"--force " .
"--cvs-exclude " .
"--human-readable " .
"/apps/{$system}/ " .
"user@liveserver:/apps/{$system}_staging/"
);
现在一切都很顺利,我可以解析返回的字符串,找出需要删除的内容和需要添加/更新的内容。然后,我构建了一个 HTML 表格,根据层次结构自动缩进每个复选框。我还使用了一些 JavaScript,以便让用户选择文件夹中的所有文件。
如果要添加/删除文件夹本身,则将其包含在列表中。例如:
/newfolder/
/newfolder/file1.php
/newfolder/file2.php
这很好,因为'/newfolder/'将以一个缩进显示,而'/newfolder/file1.php'和'/newfolder/file2.php'将各自在'/newfolder/'下以两个缩进显示。'/newfolder/'旁边的复选框会自动选择两个“子”文件,所有人都很满意。
但是,如果只是向文件夹中添加/更新文件,则省略文件夹本身:
/oldfolder/filea.php
/oldfolder/fileb.php
这意味着'/oldfolder/'中的所有文件都会有两个缩进,但没有可见的机制可以选择文件夹中的所有文件。
那么我的问题是:是否有我在可用的rsync参数中忽略的东西,可以强制其包括任何更新文件的文件夹,或者我必须添加它们作为我循环遍历数组的一部分? 如果是后者,最好的方法是什么?
请帮帮我,坚韧不拔的Stack Overflowbi,你是我唯一的希望...