我有一个连接到大约1000多个数据库的函数,并将数据返回并将其放入数组中。
但是,数据太大了,我希望每次循环通过连接时在浏览器上显示结果,而不是等待整个循环完成。
或者如果有更好的方法,请分享。
function Get_data()
{
// loop base on the number of available databases
for ($i = 0; $i < count($client_databases); $i++) {
// Getting connection for each database
$database = $this->connect_clients_db($client_databases[$i]);
// return an array of data from the database
$ClientShema = $this->getSomeData($database);
// put the data in array
$schemas[]=$ClientShema;
}
return $schemas;
}
结果的例子是
循环1(database_one) 这是来自数据库的数据
循环2(database_two) 这是来自数据库二的数据
答案 0 :(得分:4)
您可以turn on output buffering并定期将缓冲区刷新到浏览器。
首先,您必须向浏览器发送一定数量的数据:
echo str_repeat(" ", 40000);
接下来,您需要启动输出缓冲:
ob_start();
最后,在输出要发送到浏览器的内容后,需要刷新输出缓冲区。我发现我必须调用以下三个函数才能使它工作:
ob_end_flush();
ob_flush();
flush();
因此,您的代码可能如下所示:
function Get_data()
{
echo str_repeat(" ", 40000);
//loop base on the number of available databases
for ($i = 0; $i < count($client_databases); $i++) {
//Start buffering output
ob_start();
// Getting connection for each database
$database = $this->connect_clients_db($client_databases[$i]);
// return an array of data from the database
$ClientShema = $this->getSomeData($database);
// put the data in array
$schemas[]=$ClientShema;
//Write some output somewhere here.
//flush the output buffer here.
ob_end_flush();
ob_flush();
flush();
}
return $schemas;
}
以下是可用于测试此技术的代码块:
<?php
echo str_repeat(" ", 40000);
for ($i = 0; $i < 10; $i++) {
ob_start();
echo "Hello world.<br/>";
ob_end_flush();
ob_flush();
flush();
usleep(500000);
}