0

我正在尝试为包含我在循环中收到的信息的表打印一行。这确实有效,但是,我循环的数组有大约 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 也需要关闭。

我将它们都禁用了,但仍然挂起,直到它在显示任何输出之前完成。

提前致谢!

4

2 回答 2

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,修好了。

于 2013-07-20T16:10:36.317 回答
0

显示需要时间,因为您使用了 usleep(1000000); 等待 1 秒。

而不是使用 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);
}
于 2013-07-20T16:15:31.997 回答