0

PHP で接続のタイムアウトを設定しようとすると問題が発生するssh2_execため、コマンドの実行中に何か問題が発生した場合、実行中のスレッドが解放され、Web サイト全体が妨害されることはありません。試してみ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仕様には真の「タイムアウト」実装はありません。

この問題に対して私が見つけた唯一の解決策は、次の投稿にあります: PHP ssh2_connect() Implement A Timeout

于 2013-08-29T18:44:14.433 に答える
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 に答える