2011-07-12 12 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);} 
}); 

パラメータがない場合には、時々、 "Net_SSH2 ::読んで()" 失敗したため、私はdemandeに私のPHPスクリプトを停止したいと思いますrouteurの答えにあります。 (すなわち、構文エラーがある場合)。

より頻繁に、あなたの助けのための

おかげで...私は失敗した要求の後に自分のWebサーバーに再接続することはできないと私は長い時間を待つ、あるいはApacheの再起動する必要があります。 ..

答えて

0

ループ内のデータベースをチェックし、データベースに終了値を挿入するだけの別のスクリプトにAJAXビットをポストします。

EDIT: 私は完全にあなたのコードを理解するかどうかわからないんだけど、ここで私はどうなるのかです:

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

この保証します。

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

ハム、私は理解していない...私の問題は、$ a-> read()関数が失敗した場合、PHPスクリプトが終了しないということです...キーボードのESCAPEを押してもSSHセッションが残っています。再試行できるようにApacheを再起動する必要があります... – Franquis

+0

編集を確認してください、私は間違いがあるかもしれないので、テストしませんでした。それは私が何を意味するかを示しています。 – AndyL

0

実行時にmax_execution_time低く設定することができますスクリプト自体が完了していない場合でも、スクリプト自体は10秒後に終了します。どのくらいの時間を取ることができるかによって、選択しなければならない時間。

関連する問題