0

尝试在 PHP 中为我的ssh2_exec连接设置超时时遇到问题,这样当运行命令时出现问题时,它会释放执行线程并且不会阻塞整个网站。我已经尝试过stream_set_timeout($stream,$seconds),但似乎没有按预期工作。

对此有什么想法吗?

//run specified command (ssh)
    function runCMD($cmd){
        if (!($stream = ssh2_exec($this->conn, $cmd )))
        {
            echo "fail: unable to execute command\n";
            fclose($stream);
            return ERROR_SSH_EXEC_COMM;
        }

        sleep(1);
        stream_set_timeout($stream,5);//>>not work
        stream_set_blocking($stream, true);
        $res = stream_get_contents($stream);

        return $res;
    }
4

3 回答 3

2

对于任何想知道如何设置超时的人,php.ini 中有一个default_socket_timeout变量,可用于为当前会话中任何基于套接字的连接设置超时。

您可以通过简单地运行来检查它

$timeStart = time();
ini_set("default_socket_timeout", 5);
$ssh = ssh2_connect('123.123.123.123');
echo (time() - $timeStart), PHP_EOL;
于 2016-01-06T12:09:11.667 回答
0

以下是使用纯 PHP SSH2 实现 phpseclib 的方法

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

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

$ssh->setTimeout(5);
echo $ssh->exec('whatever');
?>

如果要在该命令之后执行后续命令,则需要执行$ssh->reset().

于 2013-07-04T15:31:14.333 回答
0

AFAIK,php ssh2 规范中没有真正的“超时”实现。

我为这个问题找到的唯一解决方案可以在这篇文章中找到: PHP ssh2_connect() Implement A Timeout

于 2013-08-29T18:44:14.433 回答