从Net_SSH2库的读取函数返回的有趣字符(phpseclib)

时间:2014-01-24 16:50:47

标签: phpseclib

当我使用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]来自读取函数的返回数据?

1 个答案:

答案 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();