2014-09-18 3 views
2

Я работаю над отображением вывода ssh в своем веб-браузере. У меня есть сценарий оболочки, который я создал, который выполняет tail -f/var/log/syslog с некоторыми аргументами grep.PHP Чтение linux tail -f с SSH2

Теперь я хочу вызвать этот сценарий оболочки и отобразить данные, возвращенные в реальном времени. Что у меня есть запрос Ajax, который вызывает функцию PHP

public function siptrace($num) { 

if(is_numeric($num)) { 

    if($ssh = ssh2_connect('127.0.0.1', 3972)) { 
     if(ssh2_auth_password($ssh, 'user', 'password')) { 
      $stream = ssh2_exec($ssh, 'script '); 
      stream_set_blocking($stream, true); 
      $data = ''; 
      sleep(1); 
      while($line = fgets($stream)) { 
       flush(); 
       echo $line . "<br>"; 
      } 
     } 
    } 

} 

}

Я проверил соединение, выполнив простые команды, такие как Ls. Но теперь, когда я пытаюсь grep данные в реальном времени, он ничего не возвращает. Я могу увидеть загрузку и загрузку ajax-вызовов, что она должна делать из-за структуры while и shell?

Ajax

  $(document).ready(function() { 

       $('#sub').click(function() { 

        $.ajax({ url: 'load.php?trace='+$('#num').val(), success:function(data){ 

        } }); 

       }); 

      }); 

ли кто-нибудь заметил, что-то случилось с моим кодом?

ответ

1

Попробуйте вместо этого:

$ssh = new Net_SSH2('127.0.0.1', 3972); 
$ssh->login('user', 'password'); 
$ssh->setTimeout(2); 
$ssh->enablePTY(); 
echo $ssh->exec('script '); 

Это использует phpseclib, a pure PHP SSH2 implementation. Может работать лучше для вас, чем libssh2.