显示大型数据集(PHP)的最佳方式是什么
我有一个函数,可以连接到大约1000多个数据库,然后将数据取回并放入阵列中 但是,数据太大了,我想在每次循环通过连接时在浏览器上显示结果,而不是等待整个循环完成 或者如果有更好的方法,请分享显示大型数据集(PHP)的最佳方式是什么,php,large-data,Php,Large Data,我有一个函数,可以连接到大约1000多个数据库,然后将数据取回并放入阵列中 但是,数据太大了,我想在每次循环通过连接时在浏览器上显示结果,而不是等待整个循环完成 或者如果有更好的方法,请分享 function Get_data() { // loop base on the number of available databases for ($i = 0; $i < count($client_databases); $i++) { // Getting co
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;
}
函数Get_data()
{
//循环基于可用数据库的数量
对于($i=0;$iecho 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;
}
函数Get_data()
{
回波str_重复(“,40000);
//循环基于可用数据库的数量
对于($i=0;$i以下是可用于测试此技术的代码块:
<?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);
}
您还需要确保php.ini中的“最大执行时间”设置允许脚本在运行这些循环时不超时。@我不确定,但您无法真正控制输出/流。即使您在大多数情况下使用flush(),输出都是在脚本结束后发送的,而不是在调用flush()时发送的。@djot在我的经验中不是这样的,除非您使用的是AJAX。OP没有表示他正在使用AJAX。我也不确定它是否能在AJAX中工作。更新了一个可用的测试脚本,并进行了解释。谢谢,有人能详细介绍一下缓冲区的工作原理吗谢谢,这个小的好例子帮了大忙。