Call another PHP script and return control to user

2019-01-08 01:04发布

问题:

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?

回答1:

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."



回答2:

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 ...



回答3:

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



回答4:

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!).



标签: php email cron