PHP Чтение linux tail -f с помощью SSH2

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

Теперь я хочу вызвать этот сценарий оболочки и отобразить возвращаемые данные в режиме реального времени. У меня есть запрос 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. Но теперь, когда я пытаюсь получить данные в режиме реального времени, он ничего не возвращает. Я вижу загрузку и загрузку вызова ajax, что он должен делать из-за структуры while и оболочки?

Аякс

            $(document).ready(function() {

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

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

                    } });

                });

            });

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


person anonamas    schedule 18.09.2014    source источник


Ответы (1)


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

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

При этом используется phpseclib, чистая реализация PHP SSH2. Может работать лучше для вас, чем libssh2.

person taulia    schedule 18.09.2014