I think I did not express myself clearly.
What I want is to be able to redirect user an existing page (let them get it
immediately), and to close the connection actively, NOT passively by user
abort, at last, to run the function in background.
But the redirecting using function header() with location has a problem that
header() always does return the page to user after the entire program,
including registered showdown function finish running, which is against the
will. I put a time consuming task into a function that registered to be a
shutdown function and hoping it runs after the user has got the redirected
page and the connection has been closed. But experiements (using browsers,
curl command line tool as well as perl::LWP code) show that the user got the
redirected page only after the shutdown function finished, which is against
the description of register_shutdown_function at php website.
It seems only header() function use to redirect page has this problem (not
executed until register_shutdown_function finished) while other functions
like print()/echo(), exec() have not.
The code looks like:
---------------------------------------------------------------------------------------------
<?php
set_time_limit(1);
function f(){
set_time_limit(20);
$count=50000000;
for($i=0; $i<$count; $i++){ }
echo "end";
exec("touch /home/.nappy/liang/liang.ns2user.info/php/aaa");
}
register_shutdown_function('f');
header("Content-type: text/plain");
header("Location: y.html");
?>
---------------------------------------------------------------------------------------------
http client who sends the request to the php program will only get the page
back as response after function f finsihes (file aaa created). Changing the
$count will make a lot difference.
My BIGGEST question is:
How to make user get the redirect page immediately after the header() is
called, and not until function f() ends, while making sure that the function
f() will finally fully (and might slowly) execute?
Thank you very much for kindly replying.
With high respect,
Liang
Liang ZHONG wrote:
> My Question is:
> What is the correct way to keep the function running after I redirect an
> existing page to http client (which I want the client get immediately)
> and then immediately close the connection?
ignore_user_abort(true);
-Rasmus
--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php
--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php