我正在尝试为包含循环中收到的信息的表打印一行。这确实有效,但是,数组I循环有大约200个项目,它会挂起,直到检查每个项目。有没有办法在每次迭代时打印行? 我使用的示例代码:
foreach ($array_check as $dns) {
if (checkdnsrr($dns. '.',"A")) {
$ret = "<tr>
<td><span class='badge badge-important'><i class='icon-remove icon-white'></i></span></td>
<td>$dns</td>
<td>-</td>
<td>-</td>
<td>-</td>
<td>option</td>
</tr><br/>";
echo $ret;
} else {
$ret = "<tr>
<td><span class='badge badge-success'><i class='icon-ok icon-white'></i></span></td>
<td>$dns</td>
<td>-</td>
<td>-</td>
<td>-</td>
<td>option</td>
</tr><br/>";
echo $ret;
}
flush();
ob_flush();
usleep(1000000);
}
任何建议都值得赞赏,我在互联网上搜索了很多这方面的内容,大多数情况下我发现需要关闭的output_buffering和gzip也是关闭的。
我将它们都禁用但仍然挂起,直到显示任何输出完成。
提前致谢!
答案 0 :(得分:0)
首先,对您的HTML进行一点修正:<br>
之后不需要<tr>
。这实际上是错误的,你不应该在表体内添加任何不同于<tr>
的内容。
关于你的问题,如果我做对了你想要逐行打印输出,同时执行循环,对吧?
您尝试做的是非常依赖于浏览器,更好的更改方法:通过AJAX请求数据,在您的PHP脚本中只需使用:
$output = array();
foreach ($array_check as $dns) {
$output[] = checkdnsrr($dns. '.', "A");
}
header('Content-type: application/json');
echo json_encode($output);
然后使用javascript添加您喜欢的时间来解析客户端的HTML,或者使用JQuery并添加一些精美的动画。
编辑:我忘记了checkdnsrr
,修复了它。
答案 1 :(得分:0)
显示需要时间,因为你使用usleep(1000000);等一秒钟。
而不是使用if else来显示具有此类或该类的行,您只需执行以下操作:
foreach ($array_check as $dns) {
echo "<tr>
<td><span class='badge badge-".((checkdnsrr($dns. '.',"A"))?'important':success)."'><i class='icon-remove icon-white'></i></span></td>
<td>$dns</td>
<td>-</td>
<td>-</td>
<td>-</td>
<td>option</td>
</tr><br/>";
flush();
ob_flush();
usleep(1000000);
}