2012-12-28 5 views
0

NET_SSH를 사용하여 SSH 연결을 통해 mysql 데이터베이스에 연결하려고합니다. 대화 형 셸을 읽고 쓰고 있습니다.PHP NET_SSH 의도 한대로 작동하지 않습니다.

내 코드는 다음과 같습니다

echo '<pre>'; 
     $ssh -> setTimeout(10); 
     echo $ssh -> read(''); 

     $ssh -> write('ls'); 
     echo $ssh -> read(''); 
     echo '<br />'; 

     $string = 'mysql -u '. $database -> database_user . ' -h ' . $database -> datbase_host . ' --password=' . $database -> database_password . ' ' . $database -> database_name. '; show databases;'; 
     $ssh -> write($string); 
     echo $ssh -> read('mysql>'); 
     echo '<br />'; 

     $this -> write('show databases;'); 

     echo $ssh -> read(''); 
     echo '<br />'; 

하지만 내 출력은 다음과 같습니다

[email protected]:~$ ls 
    Last login: Fri Dec 28 16:08:39 2012 from ool3.dyn.optonline.net 

    mysql -u db_user -h xxx.us-east-1.rds.amazonaws.com --password=abc123 my_database; show databases;[email protected]:~$ mysql -u db_user -h xxx.rds.amazonaws.com --password=abc123 my_database; show databases; 
    Last login: Fri Dec 28 16:08:49 2012 from ool3.dyn.optonline.net 

show databases;[email protected]:~$ show databases; 

내 질문은 내가 생각했던 것처럼 왜 대화하지 않을입니까? 예상 된 결과가 mysql 연결이거나 적어도 mysql 프롬프트라고해야합니다. 그러나 나는 그것을 얻는다. 내가 뭔가 잘못하고 있는거야?

답변

1

솔직히, 나는 그것을 완전히 다시 쓰겠습니다. 예.

echo '<pre>'; 
     echo $ssh -> read('[prompt]'); 

     $ssh -> write("ls\n"); 
     echo $ssh -> read('[prompt]'); 
     echo '<br />'; 

     $string = 'mysql -u '. $database -> database_user . ' -h ' . $database -> datbase_host . ' --password=' . $database -> database_password . ' ' . $database -> database_name. '; show databases;'; 
     $ssh -> write("$string\n"); 
     echo $ssh -> read('mysql>'); 
     echo '<br />'; 

     $this -> write("show databases;\n"); 

     echo $ssh -> read('mysql>'); 
     echo '<br />'; 

오직 read ('')를 사용하는 경우에만 프롬프트가 무엇인지 파악하는 것입니다.

또한 모든 쓰기 요청을 \ n으로 끝내는 것에 유의하십시오. 리눅스는 AJAXified 서버가 아닙니다. 명령을 입력하지 않고 명령이 실행되기를 기대합니다. 엔터를 눌러야합니다.

가끔은 키를 누를 수 있으며 가볍게 누르지 않으면 일을 처리합니다. vi의 경우와 같습니다. 당신은 정상 모드 (삽입 모드와 반대)이고 열려있는 텍스트 파일에서 dd를 치면 입력 한 히트를 치지 않아도 삭제 된 전체 라인이 나타납니다.

+0

프롬프트가 같은 결과 –

+0

내 게시물을 업데이트했습니다. 길고 짧게 ... 모든 write() 호출 끝에 \ n을 추가하십시오. – neubert

관련 문제