简体   繁体   中英

How to pass variables between scripts running in parallel

I'm running IIS on a Windows Server w/PHP 5.3. I have two scripts; let's call them initiator.php and worker.php. A user calls initiator.php and in this script a variable is defined; let's call it $input. I would like to take this $input variable and pass it to worker.php like so:

$oShell = new COM('Wscript.Shell');
$oShell->Run("\"C:/Program Files (x86)/PHP/v5.3/php/worker.php -a $input",0,False);

In worker.php I have the following to pick up the $input variable passed from initiator.php.

$aCliOpts = getopt('a:');
$input_from_initiator = $aCliOpts['a'];

This works great. initiator.php's $input variable is successfully passed to worker.php which picks it up and initiator.php keeps chugging. However, worker.php then takes it's own $input_from_initiator variable, runs through some quick code of it's own and creates a third variable called $output_from_worker. It is this variable that I need initiator.php to read a little ways into it's processing. This is where I'm getting hung up.

I've tried passing the variable back to initiator.php from worker.php the same way it a variable as passed in the beginning and this did not work. I've also tried to use:

header('Location: initiator.php?var=value') 

using HTTP GET params but to no avail.

My last resort is for worker.php to write this variable's value to disk then have initiator.php read from disk. I hate to do this due to the latent disk I/O. Speed is very important to this script.

Is there a way two PHP processes can pass variables between each other in memory?

Have a look at file_get_contents() http://php.net/file_get_contents , which you can pass a URL to. So you could use the Query String like:

 $var = file_get_contents('http://site.tld/worker.php?input='.$input);

And in worker.php , simply echo your result.

It's a shame you're running on Windows, because the sys5 extension on *nix is marvelous!

You can always use files or a database etc for communication.

Thanks for the help although I ended up doing something a little different than my original question. I was trying to run different cURL requests. curl_multi_exec() ended up working great for me.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM