是否可以使用PHP同时更新屏幕并等待用户输入?

时间:2012-05-14 15:45:35

标签: php

我想编写一个小型管理工具来监督我的服务器进程,我的问题是现在,我怎么能等待用户输入并同时用当前统计数据更新屏幕?甚至可以使用PHP-CLI,还是有任何技巧可以解决我目前失踪的问题?

我已经研究过newt和ncurses PECL扩展,但两者似乎都不符合我的需求。

4 个答案:

答案 0 :(得分:1)

前往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.....
    }
}

答案 1 :(得分:0)

我认为你不能用PHP CLI做到这一点。据我所知,在使用PHP解释脚本时,您只能查看最终输出。

答案 2 :(得分:0)

我认为你确实想要ncurses。如果你可以转换你应该能够使用PHP包装器的简单示例C代码here,那么你就可以使用“bootstrap”解决问题。

确保在某个地方发布您的代码! :)

答案 3 :(得分:-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);
    });

} 

如果您需要更新页面上的多个区域,可以进行一次调用但返回JSON或XML,然后根据需要填充这些位。