|
Posted by Francois Bonzon on 11/18/27 11:40
On 2006-02-20 03:44:13 +0100, Michael Austin said:
> Francois Bonzon wrote:
>
>> Any idea how I can launch a background task from a PHP script?
>>
>> For example, when a user posts on my message board, it may fire many
>> e-mail notifications to other users, and other tasks. I want the
>> posting confirmation page to end displaying quickly, without waiting
>> for those notifications or other tasks to complete.
>>
>> So basically what I want is to launch 'background.php' from 'main.php',
>> with the user seeing only the output of - and waiting only for the end
>> of - 'main.php'. Without the need to wait for the end of the possibly
>> long 'background.php', like if I had simply included it in 'main.php'.
>>
>> According to the PHP Manual, the function register_shutdown_function()
>> was the solution "in PHP 4.0.6 and earlier under Apache", but "since
>> PHP 4.1 the shutdown functions are called as the part of the request"
>> so that PHP waits until the shutdown functions are completed before
>> closing the connection to the user.
>>
>> E.g. in PHP 4.1+ this
>>
>> <?php
>> function background () {
>> echo 'Starting background task... ';
>> // Do something long that I don't want the user to see or wait for
>> sleep(5);
>> echo 'End of background task. ';
>> }
>>
>> echo 'Starting main script... ';
>> register_shutdown_function('background');
>> echo 'End of main script. ';
>> ?>
>>
>> will output:
>>
>> Starting main script... End of main script. Starting background task...
>> End of background task.
>>
>> I want a way to output only:
>>
>> Starting main script... End of main script.
>>
>> and do the remaining in background.
>>
>
>
> What platform are you on?
>
> if this is UNIX then you can do an exec() or system() call or something like
> `./executethisfile > out.log &`
> note these are back-ticks (key on the top row far left ~` )
>
> the "&" tells the shell script to execute in the background. Not sere
> how you would accomplish this on the Windows platform, but then again
> if you are doing anything serious, Windows is not your server platform.
I'm on a UNIX platform. I tested your solution, and it works fine. Thank you.
However, some hosts where I plan to use this disabled the exec() and
system() functions. The pcntl extension is also disabled there. So I
guess it can't be helped here.
Navigation:
[Reply to this message]
|