2012-05-14 13 views
7

私は自分のサーバープロセスを監視するための小さな管理ツールを書こうと思っています。私の問題は今ですが、私はユーザーの入力を待ち、同時に現在の統計情報で画面を更新できますか?それはPHP-CLIでも可能ですか、それとも私が現在行方不明になっていることに対して何かお手伝いがありますか?PHPを使って画面を更新し、同時にユーザー入力を待つことはできますか?

私はnewtとncursesのPECL拡張を調べましたが、どちらも私のニーズに合わないようです。

+2

何アヤックスは? – Jrod

+1

私はこの作業にBashを使うことを提案します。 –

+1

私はあなたがこれを使用できるかもしれないと思います: http://stackoverflow.com/questions/3684367/php-cli-how-to-read-a-single-character-of-input-from-the -tty-without-waiting-f – h00ligan

答えて

-1

私の助言は、PHPを終了している間にプロセスが実行されているという話をする解決策を避けることです。ここでのjQueryのビットでそれを行う方法の本当に簡単な例です:

window.setInterval(checkstat, 10000); //10 second interval 

function checkstat() { 

    //Change a div with id stat to show updating (don't need this but it's nice) 
    $('#stat').html('Updating...'); 

    $.get('/getmystats.php?option=blah', function(data) { 
     //Update the results when the data is returned. 
     $('#stat').html(data); 
    }); 

} 

あなたのページに複数のエリアを更新する必要がある場合、あなたはその後、1つのコールを行いますが、JSONやXMLを返すことができ必要に応じてビットを入力します。

+1

私は彼がphp-cliを使いたいのでjqueryを探しているとは思わない。 – Zombaya

+0

私はコマンドラインで作業しています。 Webサーバーがインストールされておらず、ssh単位でしかアクセスできない –

0

私はあなたがPHP CLIでそれを行うことはできないと思います。私が知っているように、PHPでスクリプトを解釈するときは、最終的な出力しか見ることができません。

0

あなたはncursesが必要だと思います。単純な例CコードhereをPHPラッパーで使用できるように変換できれば、問題を解決するための "ブートストラップ"があります。

コードをどこかでブログに書き留めてください。 libevent http://www.php.net/manual/en/book.libevent.php

ため:)

1

ゴーおおよそこの1のようなコードを使用してコンソールを聞きながらあなたのメインループを実行することができます:

<?php 
// you need libevent, installable via PEAR 
$forever=true; 
$base=event_base_new(); 
$console=event_buffer_new(STDIN,"process_console"); 
event_buffer_base_set($console,$base); 
event_buffer_enable($console,EV_READ); 
while ($forever) { 
    event_base_loop($base,EVLOOP_NONBLOCK); // Non blocking poll to console listener 
    //Do your video update process 
} 
event_base_free($base); //Cleanup 
function process_console($buffer,$id) { 
    global $base; 
    global $forever; 
    $message=''; 
    while ($read = event_buffer_read($buffer, 256)) { 
     $message.=$read; 
    } 
    $message=trim($message); 
    print("[$message]\n"); 
    if ($message=="quit") { 
     event_base_loopexit($base); 
     $forever=false; 
    } 
    else { 
     //whatever..... 
    } 
} 
関連する問題