blee908
blee908

Reputation: 12555

Need page to wait for php to finish

Simple question, but I can't seem to find the answer.

My php code takes a really long time to process because I'm generating a report from a large database. I coded an html table to display the results in a web page, but the page loads (and gets sent to clients) before my php code finishes because all the table values are empty. I run the query on phpMyAdmin and it works, but it just takes a long time. Ideas? Are there any other ways I can display the report in a table format besides seeing it in a webpage? Can I make the webpage wait until the code finishes?

Upvotes: 1

Views: 2347

Answers (3)

pilsetnieks
pilsetnieks

Reputation: 10420

The prudent way

One of the correct approaches, at least one I'd recommend, would be to, upon request from the user, add the job to a queue that is handled by a background process, for example, a PHP command line script running from a cron job. While that is going on, you can periodically request job status from the server via an AJAX call from your webpage, display progress, if you can, and present the user with the result once the job is finished. Since command line PHP scripts don't have time limits, you don't have to worry about timeouts.

Another way is what is implemented, for example, in 37signals' Highrise - they take the request add a job but display a page saying "It will be ready when it's ready," and when it is ready, they send an email to the user saying "Here's your file, come here and download."

The quick fix

To answer the question "Can I make the webpage wait until the code finishes?" – there is the set_time_limit() function that does exactly what you want.

Upvotes: 0

symcbean
symcbean

Reputation: 48357

Can I make the webpage wait until the code finishes?

It's really, really difficult to write PHP code which implements asynchronous database calls - which it would need to do if the PHP script completes before the MySQL script. Just change strip out all the asynchronous handlers in the PHP code and make the MySQL calls blocking and it will not exit before the queries complete - but I very much doubt that is what your code really is doing.

but the page loads (and gets sent to clients)

This is confused too - if you're generating HTMLthen the page is laoded after the HTML is sent to the client - not before.

Simple question

No it's not - it's very confused!

Upvotes: 0

user2312578
user2312578

Reputation:

There are several approaches

one is using

ob_start();
// processing
ob_flush();
flush();

the next is adding pagination, aka limiting the result size.

SELECT * FROM table LIMIT 0,10

SELECT * FROM table LIMIT 10,10

SELECT * FROM table LIMIT 20,10

of course it all depends on your code, without seeing your code there's only guessing what the reason might be

Upvotes: 1

Related Questions