我正在尝试在后端处理时更新前端的信息。为此,我正在使用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_flush
和flush
。如果您在页面顶部设置ob_implicit_flush(true);
,它将自动刷新您在脚本其余部分所做的任何回显或打印。
请注意,您仍然需要最少的数据量才能通过浏览器过滤器。我建议使用 str_pad($text,4096);
因为这会自动将带有空格的文本延长到 4 KB,这是使用 FireFox 和 Linux 时的最小限制。
您应该阅读手册(警告)并在那里发表评论。
我希望这对你有所帮助。