【问题标题】:Flush data in php complex loop在php复杂循环中刷新数据
【发布时间】:2016-04-25 11:07:38
【问题描述】:

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

我们将不胜感激。

【问题讨论】:

标签: php ajax flush


【解决方案1】:

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

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

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

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

【讨论】:

  • 在第二个代码中,有条件......我在谈论第一个源代码。更新了我的答案。
  • 那么您可能需要进一步检查兔子洞。检查基础设施。 php是如何运行的?阿帕奇2mod?计算机图形学?有反向代理吗?
【解决方案2】:

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

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

您应该阅读manual(注意事项)以及那里的 cmets。

希望对你有帮助。

【讨论】:

  • 我也试过ob_implicit_flush。但它给了我同样的结果。第一个输出很好,其余的都在执行完成。
  • 你也使用str_pad吗?
  • 是的,我也试过了。第一个输出是 50 或 60 个字符,它会立即打印,但其余的只有在完全执行后才打印
  • scrape_one_id 函数中有什么?
  • 它有 curl 请求和 HTML 处理。它还调用另一个函数,通过调用 CodeIgniter 模型函数将数据保存在 MySQL 数据库中
猜你喜欢
  • 2021-05-27
  • 2023-03-30
  • 2011-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多