1.11M Members

Command line equivalent of HTTP request with query string


Development: Amazon EC2 instance.
Operational: Unknown at this time

This is a *nix question but things start out in php, so please bear with me.

I'm trying to get php script (php_script_1) to to run another php script (php_script_2) in the background. This will allow php_script_1 to complete and return (with a suitable message to the user), having kicked off the lengthy php_script_2. The output of php_script_2 will be cached (in a database) for future use.

Progress to date
I have identified php's shell_exec() and a neat little "run_in_background" function wrapper to issue commands.

function run_in_background($Command, $Priority = 0){
		$PID = shell_exec("nohup nice -n $Priority $Command 2> /dev/null & echo $!");
		$PID = shell_exec("nohup $Command 2> /dev/null & echo $!");

With this, I can successfully call my php_script_2 (from php_script_1) with :-

$command = "php /var/www/make_objects.php";
$priority = 0;
$pid = run_in_background($command, $priority);//kick off background process

make_objects.php is the main target of my current development effort so it isn't yet fully working, but at least I can call it.

What I need
I need to pass arguments to php_script_2. The equivalent href (HTTP request) would be .../make_objects.php?dt=data99&z=4 so these arguments become available in php as $_REQUEST and $_REQUEST.

What I have tried
I tried the following:

$command = "php /var/www/make_objects.php?dt=data99&z=4";
$priority = 0;
$pid = run_in_background($command, $priority);//kick off background process

but get the error: Could not open input file: /var/www/make_objects.php?dt=data99&z=4 . The *nix command parser clearly doesn't allow that.

Research on the web has failed to identify the correct approach.

My Question
How do I construct $command to call /var/www/make_objects.php and pass named arguments dt=data99 and z=4 ?

Many thanks in advance to the *nix guru(s) who understand this stuff.



Look at cURL. You'll need the first PHP script to be running on a web server.

If you're not running a server, look at $argv and/or getopt.


Thanks Petteyg,

I have heard of cURL before but never needed to use it.

About to do some reading ....



OK, I have cracked it.

The *nix command is of the form (simplified) :

php /var/www/make_objects.php --aa --bb 0 --label myLabel >> /var/www/make_objects.log 2>&1

The trick is to use php's getOpt() in the called script to read the command options:

$shortopts = '';
$longopts = array();
$longopts[] = REQUEST_AA;
$longopts[] = REQUEST_BB.":";
$longopts[] = REQUEST_LABEL.":";
$_OPTIONS = getopt($shortopts, $longopts);

where REQUEST_AA, REQUEST_BB and REQUEST_LABEL are defined (in my common.php file) as follows :


I chose the variable name $_OPTIONS to be like $_REQUEST, $_GET and $_POST, as it fulfills the same purpose.

Maybe it's just me but I thought getOpt() in the PHP manual could be better described, in particular the distinction between $shortopts and $longopts.

Thanks for the pointer petteyg.


Question Answered as of 2 Years Ago by petteyg
Isn't it about time forums rewarded their contributors?

Earn rewards points for helping others. Gain kudos. Cash out. Get better answers yourself.

It's as simple as contributing editorial or replying to discussions labeled or OP Kudos

This question has already been solved: Start a new discussion instead
Start New Discussion
View similar articles that have also been tagged: