469,926 Members | 1,541 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 469,926 developers. It's quick & easy.

Launch a background task from a PHP script?

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.

Feb 20 '06 #1
6 9310
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.

--
Michael Austin.
DBA Consultant
Donations welcomed. Http://www.firstdbasource.com/donations.html
:)
Feb 20 '06 #2
On Mon, 20 Feb 2006 02:00:38 +0100, wrote:
Any idea how I can launch a background task from a PHP script?


pcntl_fork will do that for you.

--
http://www.mgogala.com

Feb 20 '06 #3
On Mon, 20 Feb 2006 02:44:13 +0000, Michael Austin wrote:
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 ~` )


On the Unix-like operating systems, there is PCNTL extension which has
calls like fork, exec, wait and signal. This extension is not available
on Windows. On windows, there are .COM and .NOT functions in the manual.
Not being a windows person, I don't really know whether those can be
used.

--
http://www.mgogala.com

Feb 20 '06 #4
d
"Michael Austin" <ma*****@firstdbasource.com> wrote in message
news:12******************@newssvr25.news.prodigy.n et...
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.


Grow up :) There are plenty of serious things one can do on Windows, infact
some one can only do on Windows.
--
Michael Austin.
DBA Consultant
Donations welcomed. Http://www.firstdbasource.com/donations.html
:)

Feb 20 '06 #5
d wrote:
"Michael Austin" <ma*****@firstdbasource.com> wrote in message
news:12******************@newssvr25.news.prodigy.n et...
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.

Grow up :) There are plenty of serious things one can do on Windows, infact
some one can only do on Windows.


I have not found anything "serious" I can do on windows that I can't do on other
platforms - and MY primary OS does not end in IX. :)
--
Michael Austin.
DBA Consultant
Donations welcomed. Http://www.firstdbasource.com/donations.html
:)
Long Live OpenVMS.
Feb 20 '06 #6
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.

Feb 20 '06 #7

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

8 posts views Thread by Bob Bedford | last post: by
11 posts views Thread by Konrad Den Ende | last post: by
8 posts views Thread by Marcus | last post: by
8 posts views Thread by Ulysse | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.