如何在不等待ssh2的情况下强制加载PHP

时间:2014-09-22 20:55:40

标签: php multithreading ssh stream

目前我有一个脚本使用SSH2在服务器上执行c程序,但是网页需要x秒来加载脚本等待的内容。有没有办法让php通过ssh发送命令而不是等待响应?谢谢 我目前的代码:

<?php
$ssh = ssh2_connect('********', 22);
ssh2_auth_password($ssh, 'root', '**********');
$stream = ssh2_exec($ssh, './sr1 80 4 400 400 20');
fclose($stream);
?>

(截断的服务器IP和密码,原因很明显)

3 个答案:

答案 0 :(得分:1)

使用http://phpseclib.sourceforge.net/ ...

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

$ssh = new Net_SSH2('********', 22);
$ssh->login('root', '**********');
$ssh->enablePTY();
$ssh->exec('nohup ./sr1 80 4 400 400 20 &');

你可以尝试使用和不使用nohup和&amp;但我猜他们是必要的。

答案 1 :(得分:0)

您可以在Thread中运行代码,以便异步运行:

<?php
class MySsh extends Thread {
    public function run() {
        $ssh = ssh2_connect('********', 22);
        ssh2_auth_password($ssh, 'root', '**********');
        $stream = ssh2_exec($ssh, './sr1 80 4 400 400 20');
        fclose($stream);
    }
}
$mySsh = new MySsh();
var_dump($mySsh->start());
?>

请注意,要在php中使用Thread,您需要安装pthreads库。

答案 2 :(得分:0)

ssh2_connect,ssh2_auth_password是ssh登录所必需的。

ssh2_exec执行第二个参数&#39; ./ sr1&#39;的命令。您能否详细说明它与片段有什么关系?

其次,ssh2_exec:在远程服务器上执行命令。我认为它将等待你的命令完成执行然后返回。

您可以尝试使用ssh2_shell:请求交互式shell

您可以打开shell并调用命令来运行后台或在不同的进程中退出shell。我认为它可以比ssh2_exec更快。