phpseclib-退出回调?

phpseclib-退出回调?,php,phpseclib,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', 'p

我使用的代码来自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中关闭了连接


有人能告诉我如何在没有通知消息的情况下关闭此连接吗?

您可以忽略通知,或者阻止它们从php.ini显示 或者不用回调,使用php
sleep(x)
seconds就可以了

$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

谢谢-我还发现我可以运行
$ssh->exec(“timeout 5 ping 127.0.0.1”)//运行ping(似乎有效:)