phpseclib - 退出回调?

时间:2015-06-26 13:56:46

标签: php phpseclib

我使用SSH2示例中的代码:

<?php
include('Net/SSH2.php');

$ssh = new Net_SSH2('www.domain.tld');
if (!$ssh->login('username', 'password')) {
    exit('Login Failed');
}

function packet_handler($str)
{
    echo $str;
}

$ssh->exec('ping 127.0.0.1', 'packet_handler');
?>

这很好用,但我想在xx秒后退出流。

所以我将其修改如下:

<?php
include('Net/SSH2.php');
$st = time();
$dur = 10;

$ssh = new Net_SSH2('www.domain.tld');
if (!$ssh->login('username', 'password')) {
    exit('Login Failed');
}

function packet_handler($str)
{
    global $st, $dur, $ssh;
    echo $str;
    $now = ceil(time() - $st);
    if ($now >= $dur) { $ssh->disconnect(); unset($ssh); }
}

$ssh->exec('ping 127.0.0.1', 'packet_handler');
?>

这可以工作并退出数据包处理程序,但我得到了以下显示的通知:

  

注意:第2676行在SSH2.php中提前关闭连接

     

注意:服务在第2959行的SSH2.php中由服务器关闭

有人可以建议我如何在没有通知消息的情况下关闭此连接吗?

1 个答案:

答案 0 :(得分:1)

您可以忽略这些通知,阻止它们从php.ini中显示 或者在没有回调的情况下使用php sleep(x)秒来解决它。

$ssh->enablePTY(); 
$ssh->exec("ping 127.0.0.1"); //run the ping
sleep(3); // sleep for 3 seconds
$ssh->write("\x03"); //send CTRL+C to terminate the ping command

print $ssh->read(); // dump the output

$ssh->disconnect(); unset($ssh); //disconnect