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

问题描述:

目前,我有一个使用SSH2在服务器上执行c程序的脚本,但是该网页需要等待脚本等待的x秒加载。有没有办法让PHP通过SSH发送命令,而不是等待响应?由于 我当前的代码:如何在不等待ssh2的情况下强制加载PHP

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

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

+3

听起来像你正在尝试*异步*请求。 – 2014-09-22 20:58:51

+1

你可以把它放在它自己的文件中,然后用'exe()'从主脚本调用该文件,然后它将同步运行 – 2014-09-22 21:00:14

+1

ssh2_exec默认为非阻塞。也许你的问题是fclose。你必须马上打电话吗? – amo 2014-09-22 22:55:02

您可以依次运行在一个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 s,您需要安装pthreads库。

+0

有了这个,我得到这个错误显示:“致命的错误:班'线程'找不到”,并不发送命令。 – CarlosAllende 2014-09-22 21:25:24

+0

@GeorgeWBush对不起,你需要pthreads。我编辑了我的答案。 – 2014-09-22 21:29:14

+0

是否正在安装可轻松完成的pthreads somthing? – CarlosAllende 2014-09-22 21:39:17

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

ssh2_exec执行给定第二个参数'./sr1'的命令。您能否提供片段的具体内容?

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

你可以尝试使用ssh2_shell:请求交互的shell

你也许可以,开壳并调用你的命令来运行从外壳的背景或不同的过程和退出。我认为它可以更快,然后ssh2_exec。

使用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和&尝试,但我的猜测是,他们是必要的。