1

我试图将功能状态显示为循环,但在下一个显示之前删除以前的状态。当前代码:

<?php
@ini_set('zlib.output_compression',0);
@ini_set('implicit_flush',1);
@ob_end_clean();
set_time_limit(0);

// Perform 1st function here
echo "Retrieving Data...";
echo str_repeat(' ',1024*64);
sleep(1);


// Perform 2nd function here
echo "Analyzing Data...";
echo str_repeat(' ',1024*64);
sleep(1);


// Perform 3rd function here
echo "Done...";
echo str_repeat(' ',1024*64);
sleep(1);
// Clean all echos here..
?>
<html>
<head>
 // Dynamic head content as a result of the php functions above
</head>
<body>
</body>
</head>

现在这可行,但会一个接一个地显示所有回声。我希望下一个状态替换第一个状态,直到结束,然后在显示 html 之前删除“完成”。

我试过了:

ob_start();
echo "Retrieving Data...";
echo str_repeat(' ',1024*64);
sleep(1);
ob_end_clean();    

但这没有用。这可能吗?

4

2 回答 2

1

下面使用 last-of-type 伪 CSS 选择器隐藏所有旧的进度状态消息。这是一个相当新的选择器,所以它在旧浏览器(IE9 之前)上不能很好地工作,你可以在Mozilla 开发者网络上检查兼容性

<html>
<head>
    <style type="text/css">
        #progress span {
            display: none;
        }
        #progress span:last-of-type {
            display: block; !important
        } 
    </style>
</head>
<body>
<div id="progress">
<?php
for ($i =0; $i<=100; $i+=10) {
    ob_start();
    echo "<span>$i%</span>";
    ob_end_clean();  
    sleep(1);
}
?>
</div>
</body>
</html>
于 2013-05-06T06:21:33.803 回答
0

用 \r 输出你的行。这会将光标返回到同一行上的 0。你可以在哪里写。

echo "Retrieving Data..\r";
sleep(3);
echo "Analyzing Data...\r";
sleep(3);
echo "Done...          \r\n";

我在最后一个回显中添加了一个 \n ,否则命令提示符会覆盖最后一个回显。

于 2013-05-06T05:43:48.190 回答