我使用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中由服务器关闭
有人可以建议我如何在没有通知消息的情况下关闭此连接吗?
答案 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