显示大量数据的最佳方法是什么(PHP)

时间:2013-09-11 16:38:10

标签: php large-data

我有一个连接到大约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) 这是来自数据库二的数据

1 个答案:

答案 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);
}