我想编写一个小型管理工具来监督我的服务器进程,我现在的问题是,我如何等待用户输入并同时使用当前统计信息更新屏幕?甚至可以使用 PHP-CLI 或者我目前缺少的任何技巧?
我已经研究过 newt 和 ncurses PECL 扩展,但两者似乎都不符合我的需求。
我想编写一个小型管理工具来监督我的服务器进程,我现在的问题是,我如何等待用户输入并同时使用当前统计信息更新屏幕?甚至可以使用 PHP-CLI 或者我目前缺少的任何技巧?
我已经研究过 newt 和 ncurses PECL 扩展,但两者似乎都不符合我的需求。
去 libevent http://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.....
}
}
我不认为你可以用 PHP CLI 做到这一点。据我所知,使用 PHP 解释脚本时,您只能查看最终输出。
我认为您确实想要ncurses。如果您可以在此处转换简单的示例 C 代码,您应该能够使用 PHP 包装器进行转换,那么您将拥有解决问题的“引导程序”。
确保在某处写博客!:)
我的建议是尽量避免任何涉及在退出 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);
});
}
如果您需要更新页面上的多个区域,您可以进行一次调用但返回 JSON 或 XML,然后根据需要填充位。