在 php 复杂循环中刷新数据
Flush data in php complex loop
我正在尝试在后端处理过程中更新前端信息。为此,我使用了 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功能
也能正常工作
我们将不胜感激。
我会尝试在其中添加 ob_flush()。
编辑:在您的第一个代码中,只需将 ob_flush() 放在您的第一个 flush() 之后
看看它是如何工作的。
http://php.net/manual/en/function.flush.php
flush() may not be able to override the buffering scheme of your web
server and it has no effect on any client-side buffering in the
browser. It also doesn't affect PHP's userspace output buffering
mechanism. This means you will have to call both ob_flush() and
flush() to flush the ob output buffers if you are using those.
我想指出的是,有一个功能可以替代ob_flush
和flush
。如果您在页面顶部设置 ob_implicit_flush(true);
,它将自动刷新您在脚本其余部分中执行的任何回显或打印。
请注意,您仍然需要最少的数据量才能通过浏览器过滤器。我建议使用 str_pad($text,4096);
,因为这会自动将带空格的文本加长到 4 KB,这是使用 FireFox 和 linux.
时的最小限制
您应该阅读 manual(注意事项)并在那里发表评论。
希望对你有所帮助。
我正在尝试在后端处理过程中更新前端信息。为此,我使用了 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功能
也能正常工作我们将不胜感激。
我会尝试在其中添加 ob_flush()。
编辑:在您的第一个代码中,只需将 ob_flush() 放在您的第一个 flush() 之后 看看它是如何工作的。
http://php.net/manual/en/function.flush.php
flush() may not be able to override the buffering scheme of your web server and it has no effect on any client-side buffering in the browser. It also doesn't affect PHP's userspace output buffering mechanism. This means you will have to call both ob_flush() and flush() to flush the ob output buffers if you are using those.
我想指出的是,有一个功能可以替代ob_flush
和flush
。如果您在页面顶部设置 ob_implicit_flush(true);
,它将自动刷新您在脚本其余部分中执行的任何回显或打印。
请注意,您仍然需要最少的数据量才能通过浏览器过滤器。我建议使用 str_pad($text,4096);
,因为这会自动将带空格的文本加长到 4 KB,这是使用 FireFox 和 linux.
您应该阅读 manual(注意事项)并在那里发表评论。
希望对你有所帮助。