3
votes

I'm actually trying to apply this to a script that sends email. The sending email part takes a few seconds which is too long. What I want is for the first script to do its stuff and trigger another script (which sends the Email), but I want the first script to return control to the user without waiting for the second script to send the email.

Options that I have considered:
Cron Job: For this I'll have to have a cron job run something like every 2 mins. Not feasible!
PHP script activating a cron job which deactivates itself when done: Well ok, but how do I do this? Can PHP do this?

4

4 Answers

4
votes

You can also call the shell and manually call the PHP file. No cron required and no waiting.

http://www.php.net/manual/en/function.exec.php

From the Notes Section

"If a program is started with this function, in order for it to continue running in the background, the output of the program must be redirected to a file or another output stream. Failing to do so will cause PHP to hang until the execution of the program ends."

1
votes

Other solution :

  • Your script put a token somewhere (DB/filesystem) when a mail needs to be sent (token may contain data for mail generation)
  • A daemon (can be written in php) runs in the background looking for tokens and "eats" them to send mail

I use this kind of solution quite a lot ...

1
votes

I am using jQuery and AJAX to do stuff like this for PHP scripts which take long time.

0
votes

What you want to use is something called beanstalkd

Details: How can I get a list of all jobs in a beanstalk tube?

It will allow you to queue up jobs (do 1, then 2, then 3. then 4) you can even distribute these tasks across servers (yes for php jobs!).