2014-09-22 56 views
2

目前,我有一個使用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

回答

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 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

0

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

ssh2_exec執行給定第二個參數'./sr1'的命令。您能否提供片段的具體內容?

其次,ssh2_exec:在遠程服務器上執行命令。我認爲它會等待你的命令完成執行然後返回。

你可以嘗試使用ssh2_shell:請求交互的shell

你也許可以,開殼並調用你的命令來運行從外殼的背景或不同的過程和退出。我認爲它可以更快,然後ssh2_exec。

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和&嘗試,但我的猜測是,他們是必要的。

相關問題