phpseclib (apt-get 사용)을 사용하여 응용 프로그램을 설치하려고 시도 할 때받을 수있는 다양한 출력 결과를 처리하려고합니다 ... 그러나 작동 시키십시오. 저는 현재 다음과 같습니다
$first = $ssh->read('[email protected]:~#');
$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('[email protected]:~#')){
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('[email protected]:~#');
echo "<pre>$continue_end</pre>";
echo str_repeat(' ',1024*64);
}
이 루프는 함께 작동하는 경우 첫 번째 ... 예상치 못한 출력 (당신은 질문을받지 않고 다시 쉘에 이동이있는 경우 즉 "당신은 계속 하시겠습니까"만일 " ", 이는 이미 설치 등을 의미합니다)이 스크립트는 정상적으로 작동합니다.
그러나 응용 프로그램이 설치되어 있지 않으면 절대로 elseif 루프로 이동하지 않습니다. 그 이유는 PHP가 타임 아웃 할 때까지 첫 번째 SSH-> 읽기가 계속 될 것이기 때문입니다. 그 결과를 기다리는 중 ... 두 옵션을 동시에보고 올바른 것을 선택하도록 어떻게 써야합니까?
나는 이것에 대한 CASE를 사용하는 방법에 대한 생각,하지만를 작성하는 방법을 모르겠습니다 ...
또한가이 사용 phpseclib을 할 수있는 더 좋은 방법이 될 수도 ...하지만 그렇게하는 방법을 잘하고있다 .
감사합니다.
오, 그래, 나는 그 옵션에 대해 몰랐다는 것을 인정해야한다. 나는 이것을 사용할 것이다. CASE 문을 사용하는 방법이 있었으면 좋겠다. 그래서 "emacs는 이미 최신 버전이다. "또는"패키지를 찾을 수 없습니다 ", 등 사용자가 정확한 오류 메시지를 얻을 수 있지만 내 즉각적인 문제를 해결, 덕분에. – deranjer
내 방법을 사용하면 $ ssh-> exec와 grep을 사용하여 최신 버전으로 출력 할 수 있습니다. – jpiasetz
오 대단합니다! 그게 도움이되었다, 그냥 stristr $ ssh -> 간부 인 출력을 검색하는 데 사용하고있어 ... 잘 작동합니다, 고마워요. – deranjer