PHP函数执行时的实时输出

时间:2015-06-29 22:12:42

标签: php ajax

我的问题是我需要一个PHP脚本来连续提供其执行的证书点。我有工作AJAX来获取html但是只有在脚本完成后它才会回声。这是一个例子:

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

即使功能仍在继续,我还需要一些方法让echo实际显示在浏览器中。我尝试使用全局变量和会话变量无济于事。

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

我已经看到很多人在尝试做这类事情的问题,但据我所知,实际上不可能像你只使用PHP和AJAX那样做。为了使用AJAX而不是websockets或其他方法,您可以在需要提供输出的点处将脚本分成单独的部分,并将输出作为对单独的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']));