是否可以在完成处理之前在while循环中打印PHP?

时间:2012-05-13 03:31:48

标签: php

for($x=0;$x<100000;$x++) {
    echo "hello $x";
}

因此,通常情况下,它会先完成所有内容的处理,然后立即打印所有内容。有没有办法在命令发送时继续打印消息,这样我就会看到一个新的hello $x逐个添加或者我是否必须使用jQuery / JavaScript?

更新

我问,因为我正在尝试运行一个长测试脚本并让它在浏览器上逐一显示所有结果,所以我不必去检查日志,只能直观地看到颜色编码结果。我试图对此产生类似的效果:http://tools.css3.info/selectors-test/test.html如果有人能提供jQuery的简短示例(如果必须以这种方式完成),我将不胜感激。

2 个答案:

答案 0 :(得分:3)

虽然可以通过控制输出缓冲区来实现,但我不会这样做,主要是因为它会延迟JavaScript DOMReady事件。

如果您正在寻找视觉效果,您应该使用JavaScript(但我根据您的问题所说,我没有看到任何Ajax原因)。它可以通过简单的setInterval来完成。考虑最初为空的<div id="hello">

var i = 0;
var timer = setInterval(function(){
    if(i == 10000) {
        clearInterval(timer);
        return;
    }
    var div = document.getElementById('hello');
    div.innerHTML += 'hello ' + i + '<br>';
    i++;
}, 250);

我刚看到你的编辑,现在我觉得你其实应该使用Ajax!您链接的示例有。基本上,您必须在JavaScript中设置测试队列,其中每个测试都有一个唯一的URL。然后,只需用Ajax一次触发一个请求(jQuery和$.get将是最简单的方法)。以下假定<ul>而不是前一个示例中的div,并且服务器将针对每个测试响应成功或失败消息:

var tests = [
    'http://example.com/test1',
    'http://example.com/test2',
    'http://example.com/test3',
];

function processQueue() {
    if(tests.length > 0) {
        var test = tests.shift();
        $.get(test, function(response) {
            $('#some_ul').append('<li>' + response + '</li>');
            processQueue();
        });    
    }
}

processQueue();

答案 1 :(得分:1)

是的,如果禁用输出缓冲:http://php.net/manual/en/book.outcontrol.php

但正如@Blender建议你用AJAX(通常使用jQuery)做这件事可能会更好。