我正在尝试更新前端的信息,而后端处理正在进行中。为此我使用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 功能
,它也可以正常工作任何形式的帮助都将受到赞赏。
答案 0 :(得分:0)
我尝试在那里添加ob_flush()。
编辑:在你的第一个代码中,只需在第一次刷新后放入ob_flush()() 看看它是如何工作的。
http://php.net/manual/en/function.flush.php
flush()可能无法覆盖您网络的缓冲方案 服务器,它对任何客户端缓冲没有影响 浏览器。它也不会影响PHP的用户空间输出缓冲 机制。这意味着你必须同时调用ob_flush()和 flush()用于刷新ob输出缓冲区,如果你正在使用它们。
答案 1 :(得分:0)
我想指出有一个替换ob_flush
和flush
的功能。如果您在页面顶部设置ob_implicit_flush(true);
,它将自动清除您在脚本其余部分中执行的任何回显或打印。
请注意,您仍需要通过浏览器过滤器获得最少量的数据。我建议使用str_pad($text,4096);
,因为这会自动将文本用空格填充到4 KB,这是使用FireFox和linux时的最小限制。
你应该阅读manual(警告)并在那里发表评论。
我希望这会对你有所帮助。