在 php 复杂循环中刷新数据

Flush data in php complex loop

我正在尝试在后端处理过程中更新前端信息。为此,我使用了 php flush 函数。

我的密码是

foreach ($csv_array as $row) {
    $varint=$varint+1;
    $curr_id = $row['Item'];
    $toret['row_num']=$varint;
    $toret['curr_url']=$curr_id;

    echo json_encode($toret);
    flush();

    $this->scrape_one_id($curr_id);
    $value['arrow_id']=$curr_id;
    $this->ahm->insert_new_id($curr_id);
    $this->ahm->insert_current($value);
}

我试过很多方法,但它只发回第一个回声,并在完全执行完成后发送其余部分。如果 scrape_one_id 函数被注释,它工作正常。

我尝试过的一些方法是:

foreach ($csv_array as $row) {
    $varint=$varint+1;
    $curr_id = $row['Item'];
    $toret['row_num']=$varint;
    $toret['curr_url']=$curr_id;

    echo json_encode($toret);
    if( ob_get_level() > 0 ) ob_flush();
    $content = ob_get_clean();
    flush();
    if( ob_get_level() > 0 ) ob_clean();

    $this->scrape_one_id($curr_id);
    $value['arrow_id']=$curr_id;
    $this->ahm->insert_new_id($curr_id);
    $this->ahm->insert_current($value);
}

没有scrape_one_id功能

也能正常工作

我们将不胜感激。

我会尝试在其中添加 ob_flush()。

编辑:在您的第一个代码中,只需将 ob_flush() 放在您的第一个 flush() 之后 看看它是如何工作的。

http://php.net/manual/en/function.flush.php

flush() may not be able to override the buffering scheme of your web server and it has no effect on any client-side buffering in the browser. It also doesn't affect PHP's userspace output buffering mechanism. This means you will have to call both ob_flush() and flush() to flush the ob output buffers if you are using those.

我想指出的是,有一个功能可以替代ob_flushflush。如果您在页面顶部设置 ob_implicit_flush(true);,它将自动刷新您在脚本其余部分中执行的任何回显或打印。

请注意,您仍然需要最少的数据量才能通过浏览器过滤器。我建议使用 str_pad($text,4096);,因为这会自动将带空格的文本加长到 4 KB,这是使用 FireFox 和 linux.

时的最小限制

您应该阅读 manual(注意事项)并在那里发表评论。

希望对你有所帮助。