PHP函数执行时的实时Ouput


Realtime Ouput while PHP Function is Executing

我的问题是,我需要一个PHP脚本来在执行的某些点上持续提供输出。我已经使用AJAX来获取html,但它只有在脚本完成后才会返回。这里有一个例子:

<?php 
class test {
     function test() {
          echo '1';
          sleep(20);
          echo '2'
          sleep(5);
     }
 }

我需要一些方法来让echo在浏览器中实际显示,即使该功能仍在继续。我尝试过使用全局变量和会话变量,但都没有成功。

谢谢你的帮助!

我见过很多人试图做这种事情的问题,但据我所知,只使用PHP和AJAX是不可能做到的。为了只使用AJAX而不是WebSocket或其他方法来实现这一点,您可以在需要提供输出的地方将脚本分解为单独的部分,并将输出作为对单独AJAX请求的响应来提供。这是我的意思的一个基本例子。页面上的脚本可以启动流程,并重复调用以逐步完成流程,直到流程完成。

<button id="begin_process">Start</button>
<script type="text/javascript">
    function step(step_number) {
        $.get('test.php', {'step_number': step_number}, function(response){
            console.log(response.message);
            if (response.next_step) {
                step(response.next_step);
            }
        }, 'json');
    }
    $(document).ready(function(){
        $('#begin_process').click(function(){
            console.log('go!');
            step(1);
        });
    });
</script>

test.php:

<?php 
class Test {
    function step($step_number) {
        switch ($step_number) {
            case 1:
                return array('next_step' => 2, 'message' => 'step 1 complete');
            case 2:
                sleep(20);
                return array('next_step' => 3, 'message' => 'step 2 complete');
            case 3:
                sleep(5);
                return array('message' => 'finished');
        }
    }
}
$test = new Test();
echo json_encode($test->step($_GET['step_number']));