サーバープロセスを監視するための小さな管理ツールを作成したいのですが、現在の問題は、ユーザー入力を待ちながら、同時に現在の統計で画面を更新するにはどうすればよいですか? PHP-CLIでも可能ですか、それとも現在欠けているこれを行うためのトリックはありますか?
newt と ncurses の PECL 拡張機能を調べましたが、どちらも私のニーズに合わないようです。
サーバープロセスを監視するための小さな管理ツールを作成したいのですが、現在の問題は、ユーザー入力を待ちながら、同時に現在の統計で画面を更新するにはどうすればよいですか? PHP-CLIでも可能ですか、それとも現在欠けているこれを行うためのトリックはありますか?
newt と ncurses の PECL 拡張機能を調べましたが、どちらも私のニーズに合わないようです。
libeventhttp://www.php.net/manual/en/book.libevent.phpにアクセスします
次のようなコードを使用して、コンソールを聴きながらメインループを実行できます。
<?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.....
}
}
PHPCLIではそれができないと思います。私が知っているように、PHPでスクリプトを解釈する場合、最終的な出力しか表示できません。
ncurses が必要だと思います。PHPラッパーでできるはずの簡単なCコードの例をここに変換できれば、問題を解決するための「ブートストラップ」が得られます。
コードをどこかにブログに投稿してください。:)
私のアドバイスは、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 を返し、必要に応じてビットを入力できます。