Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

PHP: How to return information to a waiting script and continue processing

Tags:

php

Suppose there are two scripts Requester.php and Provider.php, and Requester requires processing from Provider and makes an http request to it (Provider.php?data="data"). In this situation, Provider quickly finds the answer, but to maintain the system must perform various updates throughout the database. Is there a way to immediately return the value to Requester, and then continue processing in Provider.

Psuedo Code

Provider.php 
{
   $answer = getAnswer($_GET['data']);
   echo $answer;
   //SIGNAL TO REQUESTER THAT WE ARE FINISHED
   processDBUpdates();
   return;
}
like image 985
jW. Avatar asked Sep 23 '08 18:09

jW.


3 Answers

You can flush the output buffer with the flush() command.
Read the comments in the PHP manual for more info

like image 87
Peter Olsson Avatar answered Nov 10 '22 06:11

Peter Olsson


I use this code for running a process in the background (works on Linux).

The process runs with its output redirected to a file.

That way, if I need to display status on the process, it's just a matter of writing a small amount of code to read and display the contents of the output file.

I like this approach because it means you can completely close the browser and easily come back later to check on the status.

like image 31
Mark Biek Avatar answered Nov 10 '22 06:11

Mark Biek


You basically want to signal the end of 1 process (return to the original Requester.php) and spawn a new process (finish Provider.php). There is probably a more elegant way to pull this off, but I've managed this a couple different ways. All of them basically result in exec-ing a command in order to shell off the second process.

adding the following > /dev/null 2>&1 & to the end of your command will allow it to run in the background without inhibiting the actual execution of your current script

Something like the following may work for you:

exec("wget -O - \"$url\" > /dev/null 2>&1 &"); 

-- though you could do it as a command line PHP process as well.

You could also save the information that needs to be processed and handle the remaining processing on a cron job that re-creates the same sort of functionality without the need to exec.

like image 1
William OConnor - csevb10 Avatar answered Nov 10 '22 08:11

William OConnor - csevb10