当我使用Net_SSH2库和这样的读/写函数时:
$ssh = new Net_SSH2($strServerIPAddress);
if(!$ssh->login($strServerUsername, $strServerPassword))
die("error");
$ssh->write(" service httpd reload\n");
$strApacheRestartResult = $ssh->read("[root@$strServerName ~]#");
$ssh->disconnect();
我在读取函数结果($ strApacheRestartResult)中得到了有趣的字符,我在通过Putty运行相同的东西时看不到,见下文:
service httpd reload
Reloading httpd: [60G[[0;31mFAILED[0;39m]
[root@server1 ~]#
为什么这些[60G[[0;31m
和[0;39m]
来自读取函数的返回数据?
答案 0 :(得分:0)
它们是ANSI控制代码。他们的目的是控制文本和颜色的格式,而不是。要正确解码它们,您需要一个终端仿真器。 phpseclib有一个名为File_ANSI:
http://phpseclib.sourceforge.net/ssh/examples.html#top
这是你的代码被重写以使用它:
$ssh = new Net_SSH2($strServerIPAddress);
$ansi = new File_ANSI();
if(!$ssh->login($strServerUsername, $strServerPassword))
die("error");
$ssh->write(" service httpd reload\n");
$ansi->appendString($ssh->read("[root@$strServerName ~]#"));
echo $ansi->getScreen();
$ssh->disconnect();