在php复杂循环中刷新数据

时间:2016-04-25 11:07:38

标签: php ajax flush

我正在尝试更新前端的信息,而后端处理正在进行中。为此我使用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 功能

,它也可以正常工作

任何形式的帮助都将受到赞赏。

2 个答案:

答案 0 :(得分:0)

我尝试在那里添加ob_flush()。

编辑:在你的第一个代码中,只需在第一次刷新后放入ob_flush()() 看看它是如何工作的。

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

  

flush()可能无法覆盖您网络的缓冲方案   服务器,它对任何客户端缓冲没有影响   浏览器。它也不会影响PHP的用户空间输出缓冲   机制。这意味着你必须同时调用ob_flush()和   flush()用于刷新ob输出缓冲区,如果你正在使用它们。

答案 1 :(得分:0)

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

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

你应该阅读manual(警告)并在那里发表评论。

我希望这会对你有所帮助。