What you could do is utilize the php flush() function while your script is
looping
Please note however that although this function clears the internal output
buffer in PHP, it doesn't affect the output buffer in your webserver (if
such is used), neither does it prevent the user's browser from caching in
its input buffer (most browsers have an input buffer on 256 bytes)
There's a work around to the browser input however, something like the
following should do the trick if used as step 2) and 3) as it does both the
work and displays the progress bar.
<?php
// Connect to database
$rDBconn = pg_connect("user=XX pass=YY");
// Get lots and lots of data
$strSQL = "SELECT * FROM Huge_Tbl";
// Execute query
$res = pg_query($rDBconn, $strSQL);
// headline
$sOut = "<strong>Progress</strong>" . "<br />";
// Append blank spaces to fill browsers input buffer
$sOut = $sOut . str_repeat(" ", 260 - strlen($sOut) );
// Display headline
echo $sOut;
// Flush PHP output buffer
flush();
// Loop through recordset
while($RS = pg_fetch_array($res) )
{
/*
Do your calculations with the current record
*/
// Progress bar
$sOut = "# ";
// Append blank spaces to fill browsers input buffer
$sOut = $sOut . str_repeat(" ", 260 - strlen($sOut) );
// Display next
echo $sOut;
// Flush PHP output buffer
flush();
}
?>
Of course this will only work if you return your recordset in chunks to PHP,
should you however utilize a PostGre function to do some heavy calculations
(and thus having all your work in the database) PHP making a progressbar is
a bit more tricky.
In this exampla you might want to consider counting the number of records
first so you can give the user an idea of how long
the progress actually is instead of simply showing progress.
Hope this helps
/Jona
-----Original Message-----
From: pgsql-php-owner@postgresql.org
[mailto:pgsql-php-owner@postgresql.org]On Behalf Of Thom Dyson
Sent: 15 December 2003 21:23
To: pgsql-php@postgresql.org
Subject: Re: [PHP] A progress page with PHP + PostgreSQL
I've never done this, but my first guess would be to send the user to a
temp page after step 1. This temp page would have some animated gif so the
user thinks something is happening (step 3). After a fixed time period
(equal to the loop time on the gif), the temp page auto-redirects to a new
page that shows the final results (step 4)
Thom Dyson
Director of Information Services
Sybex, Inc.
On 12/15/2003 11:30:06 AM, Sai Hertz And Control Systems
<sank89@sancharnet.in> wrote:
> Dear all,
>
> Permit me to gain some of your most valuable knowledge ...........
>
> In one of our application a process takes time and as the work is in
> progress we want to show our customer a progress bar
> or processing page
> It is some thing like this
>
> 1. Customer Clicks on button EXECUTE
> 2. The pgsql function is invoked
> Now normally after step 2 a success page will return only after the
> postgresql function finishes
> but we would like as
> 3. Show progress of executed function
> 4. On Sucessfull completion Show Success page
> else error page
>
> Would be greatefull to all for any tiny clue.
>
>
> Regards,
> Vishal Kashyap
>
> ---------------------------(end of broadcast)---------------------------
> TIP 4: Don't 'kill -9' the postmaster
---------------------------(end of broadcast)---------------------------
TIP 7: don't forget to increase your free space map settings