2011-07-12 84 views
0

Bonjour, 我試圖用PHP和phpseclib連接到路由器。放棄嘗試通過SSH與Ajax請求進行連接的PHP腳本?

<?php 
    function connect_ssh(){ 

    set_time_limit(10); 
    ob_start(); 

    register_shutdown_function('shutdown'); 

    if(connection_aborded()){ 
     die(); 
    } 


    function shutdown(){ 
     print ob_get_clean(); 
    } 

     $res = array(); 
     $a = new Net_SSH2($host); 

     $a->write("show time\r\n"); 


    try{ 
     $res[] = $a->read('\r\n'); 
     $res[] = $a->read('\r\n'); 
     $res[] = $a->read('#'); 

    } catch(Exception $e) 
    {  

      ob_flush(); 
      var_dump(compact('e','res')); 
    } 


    } return json_encode(compact('e','res'));?> 

林調用使用jQuery這樣的功能:

$.ajax({ 
url:'myURL', 
data: null, 
type: 'POST', 
dataType: 'json', 
success: function(z){ console.log(z);} 
}); 

我想阻止我的PHP腳本在demande因爲有時候, 「Net_SSH2 ::閱讀()」 失敗,如果該參數不在routeur答案中找到。 (即如果有語法錯誤)。

更多的時候,我不能失敗的請求後重新連接到我的Web服務器,我不得不等待很長一段時間,甚至重新啓動Apache的...

感謝您的幫助。 ..

回答

0

使其檢查循環中的數據庫並將AJAX位發佈到另一個腳本,該腳本只是將退出值插入到數據庫中。

編輯: 我不知道如果我完全理解你的代碼,但這裏是我會做:

function() { 
    $con = database_of_choice($host, $user, $pass, $db); 
    while (!$quitter) { 
     $r = $con->query('SELECT shouldquit FROM info LIMIT 1'); 
     if ($r['shouldquit'] == 'quit') { 
      $quitter = true; 
      continue; 
     } 
     //important connection stuff here...  
    } 
} 
+0

嗡嗡聲,林不知道我明白了...我的問題是,我的PHP腳本永遠不會結束,如果$ a-> read()函數失敗... SSH會話仍然存在按ESCAPE鍵盤上,我必須重新啓動Apache才能重試... – Franquis

+0

檢查編輯,我沒有測試,所以可能會出現錯誤。但它顯示了我的意思。 – AndyL

0

您可以設置更低的max_execution_time在運行時:

ini_set('max_execution_time', 10); // maximal execution time in seconds 

這保證腳本本身在10秒後結束,即使它尚未完成。時間你必須選擇,取決於它可以佔用多長時間。

相關問題