**前言:我对网络知之甚少。如果我描述设置错误,我会再试一次。 **
我有一个服务器集群serverA,serverB和serverC都在防火墙和交换机后面。我想以编程方式将文件从serverA移动到serverB。过去当我不得不将serverA上的文件移动到serverA上的另一个位置时,我只需要调用exec(“sudo mv file1 / home / user / file1”);当涉及多个服务器时,我还可以这样做吗?
编辑:所有伟大的回应家伙。我研究一下服务器是如何集群的,看看它是挂载还是发生了什么。谢谢大家!你们是我的英雄!
答案 0 :(得分:1)
首先,您应该使用本机函数来移动文件。请参阅rename
:http://us2.php.net/rename。这只是意味着您需要确保两个位置的权限都正确(可能需要apache
用户拥有)
但是在回答你的实际问题时,这实际上取决于设置。通常,您可以将文件移动到另一个服务器将具有挂载点,它看起来像任何其他目录,因此您根本不需要对代码进行任何更改。这可能是最好的方法。
如果你必须使用FTP或类似的东西,你需要使用适当的库来满足任何所需的协议。
答案 1 :(得分:1)
如果使用安装到所有服务器的通用共享,例如nfs,则可以在文件上使用mv。
如果您没有该选项,可以使用scp或rsync将文件传输到另一台服务器。
答案 2 :(得分:1)
您可以使用linux命令行工具SCP通过SSH在网络上复制文件
确保在服务器上配置了SSH证书。
示例:
exec("sudo cp [-Cr] [[user@]ServerA:]/path/to/file [more...] [[user@]SERVERB:]/path/to/file
答案 3 :(得分:1)
虽然这个选项设置起来可能有点复杂,但我要指出UDP hole Punching。
如果知道并修复了所有服务器的地址,它就能够穿越防火墙和NAT网络。
原则上,portpunching的工作原理如下:
让 A和B成为两个主机,每个主机都在自己的专用网络中; N1和N2是两个NAT设备:
这甚至有效,A和B的地址彼此不了解。在这种情况下,需要一个公知的中间系统S 。请参阅Wikipedia article了解详情。