phpseclib read()接受上一个命令输出

phpseclib read()接受上一个命令输出,php,phpseclib,Php,Phpseclib,我正在使用phpseclib将文件从远程主机复制到本地主机。在我继续之前,我先玩一下交互式shell,以便理解其行为。我对当前代码中的行为感到困惑,它的read()函数似乎也显示了上一个命令的结果。见下文: if (!$ssh->login("myusername", "mypwd")) { exit('Login Failed'); } $ssh->read('/.*@.*[$|#]/', NET_SSH2_READ_REGEX); $ssh->write("c

我正在使用
phpseclib
将文件从远程主机复制到本地主机。在我继续之前,我先玩一下交互式shell,以便理解其行为。我对当前代码中的行为感到困惑,它的
read()
函数似乎也显示了上一个命令的结果。见下文:

if (!$ssh->login("myusername", "mypwd")) { 
    exit('Login Failed');
}

$ssh->read('/.*@.*[$|#]/', NET_SSH2_READ_REGEX); 
$ssh->write("cd /tmp; ls *.csv1\n");
$output = $ssh->read('/.*@.*[$|#]/', NET_SSH2_READ_REGEX);
$ansi->appendString($output);
echo $output = htmlspecialchars_decode(strip_tags($ansi->getScreen()));

$ssh->read('/.*@.*[$|#]/', NET_SSH2_READ_REGEX); 
$ssh->write("cd /tmp; ls *.txt\n");
$txt_output = $ssh->read('/.*@.*[$|#]/', NET_SSH2_READ_REGEX);
$ansi->appendString($txt_output);
echo $txt_output = htmlspecialchars_decode(strip_tags($ansi->getScreen()));
以下是输出:

cd /tmp; ls *.csv1 ls: *.csv1: No such file or directory [user@host tmp]#

cd /tmp; ls *.csv1 ls: *.csv1: No such file or directory [user@host tmp]#cd /tmp; ls *.txt ls: *.txt: No such file or directory [user@host tmp]#

在我看来,当我的代码处理第二个命令时,它也会处理第一个命令。如何在刷新模式下执行第二个命令?感谢您的回复。

因此,经过一段时间对代码进行更多的处理,我开始实现一种模式。在我看来,每次我想使用它时,我都需要重新初始化
ANSI

$ansi = new File_ANSI(); // <== NOTE THIS LINE
$ssh->read('/.*@.*[$|#]/', NET_SSH2_READ_REGEX); 
$ssh->write("cd /tmp; ls *.csv1\n");
$output = $ssh->read('/.*@.*[$|#]/', NET_SSH2_READ_REGEX);
$ansi->appendString($output);
echo $output = htmlspecialchars_decode(strip_tags($ansi->getScreen()));

$ansi = new File_ANSI(); // <== INITIALIZE AGAIN TO OUTPUT
$ssh->read('/.*@.*[$|#]/', NET_SSH2_READ_REGEX); 
$ssh->write("cd /tmp; ls *.txt\n");
$txt_output = $ssh->read('/.*@.*[$|#]/', NET_SSH2_READ_REGEX);
$ansi->appendString($txt_output);
echo $txt_output = htmlspecialchars_decode(strip_tags($ansi->getScreen()));

希望这能帮助其他人

所以在玩了一段时间代码之后,我开始意识到一种模式。在我看来,每次我想使用它时,我都需要重新初始化
ANSI

$ansi = new File_ANSI(); // <== NOTE THIS LINE
$ssh->read('/.*@.*[$|#]/', NET_SSH2_READ_REGEX); 
$ssh->write("cd /tmp; ls *.csv1\n");
$output = $ssh->read('/.*@.*[$|#]/', NET_SSH2_READ_REGEX);
$ansi->appendString($output);
echo $output = htmlspecialchars_decode(strip_tags($ansi->getScreen()));

$ansi = new File_ANSI(); // <== INITIALIZE AGAIN TO OUTPUT
$ssh->read('/.*@.*[$|#]/', NET_SSH2_READ_REGEX); 
$ssh->write("cd /tmp; ls *.txt\n");
$txt_output = $ssh->read('/.*@.*[$|#]/', NET_SSH2_READ_REGEX);
$ansi->appendString($txt_output);
echo $txt_output = htmlspecialchars_decode(strip_tags($ansi->getScreen()));

希望这能帮助其他人

试试
$ansi->loadString()
$ansi->appendString()
顾名思义,它是一种附加方式。

试试
$ansi->loadString()
$ansi->appendString()
appends,顾名思义。

由于某种原因,我改变了我的方法,所以我现在不使用
ansi
的东西,但是我会将此作为注释。谢谢你的回复!出于某种原因,我已经改变了我的方法,所以我现在不使用ANSI的东西,但是我会把它作为注释。谢谢你的回复!