刷新 php 复杂循环中的数据


Flush data in php complex loop

我正在尝试在后端处理时更新前端的信息。为此,我正在使用php刷新功能。

我的代码是

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()看看它是如何工作的。

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

flush() 可能无法覆盖 Web 的缓冲方案 服务器,它对 浏览器。它也不会影响PHP的用户空间输出缓冲 机制。这意味着您必须同时调用 ob_flush() 和 flush() 来刷新 OB 输出缓冲区(如果您正在使用这些缓冲区)。

我想

指出,有一个函数可以替换ob_flushflush。如果您在页面顶部设置ob_implicit_flush(true);,它将自动刷新您在脚本其余部分所做的任何回显或打印。

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

您应该阅读手册(警告)并在那里发表评论。

我希望这对你有所帮助。