phpseclib (apt-get を使用) を使用してアプリケーションをインストールしようとしていますが、受け取ることができるさまざまな出力結果を処理したいと考えています...しかし、それを機能させる方法がわかりません。私は現在、次のものを持っています:
$first = $ssh->read('root@DMZ-Server:~#');
$ssh->write("sudo apt-get install emacs\n");
echo "<br />";
echo "sudo apt-get install emacs";
echo str_repeat(' ',1024*64);
if ($unexpected_output = $ssh->read('root@DMZ-Server:~#')){
echo "<pre>$unexpected_output</pre>";
echo str_repeat(' ',1024*64);
} elseif ($continue = $ssh->read('Do you want to continue [Y/n]?')){
echo "<pre>$continue</pre>";
echo str_repeat(' ',1024*64);
$ssh->write("Y\n");
$continue_end = $ssh->read('root@DMZ-Server:~#');
echo "<pre>$continue_end</pre>";
echo str_repeat(' ',1024*64);
}
この if ループは最初の「if」でのみ機能します...つまり、予期しない出力がある場合 (「続行しますか」と尋ねられずにシェルに戻る、つまり、既にインストールされているなど)、このスクリプトはうまく動作します。
ただし、アプリケーションがインストールされていない場合は、elseif ループに移動することはありません。その理由は、最初の ssh->read が php タイムアウトまで継続し、その結果を待っているためだと確信しています...両方のオプションを同時に見て、正しいものを選択するようにするにはどうすればよいですか。
これにCASEを使おうと考えているのですが、書き方がわかりません...
phpseclib を使用してこれを行うより良い方法もあるかもしれませんが、その方法がわかりません。
ありがとう!