If you don't flush some output after setting the header() then the
headers won't go out until the end of the request.  So do something like:

ignore_user_abort(true);
header("Location: http://whatever";);
echo "foo\n"; flush();

Then whatever comes after this should run and the browser is long gone.

-Rasmus


Liang ZHONG wrote:
> 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

Reply via email to