如何在不等待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和密码)
您可以依次运行在一个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库。
有了这个,我得到这个错误显示:“致命的错误:班'线程'找不到”,并不发送命令。 – CarlosAllende 2014-09-22 21:25:24
@GeorgeWBush对不起,你需要pthreads。我编辑了我的答案。 – 2014-09-22 21:29:14
是否正在安装可轻松完成的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和&尝试,但我的猜测是,他们是必要的。
听起来像你正在尝试*异步*请求。 – 2014-09-22 20:58:51
你可以把它放在它自己的文件中,然后用'exe()'从主脚本调用该文件,然后它将同步运行 – 2014-09-22 21:00:14
ssh2_exec默认为非阻塞。也许你的问题是fclose。你必须马上打电话吗? – amo 2014-09-22 22:55:02