Cron / Linux / PHP / SSH · August 6, 2016 0

Passing arguments to cron and receive in php

Setting up cron

Crons can pass parameters or arguments to scripts as well for example you have example.php set as cron like below

/usr/bin/php -q /home/usrname/example.php

Now if you want to pass parameters to example.php in cron you can do it as follow by using key value pairs

/usr/bin/php -q /home/usrname/example.php id=123 email=test@example.com name=username

If you want to send arguments without keys you can send them as follow

/usr/bin/php -q /home/usrname/example.php 123 test@example.com username

Receiving parameters in php

Remember that $_GET or $_POST only work when php script is called from browser.
So in cron it is actually called directly from command line so no $_GET or $_POST will work here.

When script is called by command line the parameters are passed into $argv array. So $argv is the array that contains all the parameters passed to cron.

If you var_dump the $argv you will get following (if you passed key value)

array(4) {
  [0]=>
  string(27) "/home/usrname/example.php"
  [1]=>
  string(6) "id=123"
  [2]=>
  string(22) "email=test@example.com"
  [3]=>
  string(13) "name=username"
}

And if you passed parameters without keys you will get as follow

array(4) {
  [0]=>
  string(27) "/home/usrname/example.php"
  [1]=>
  string(3) "123"
  [2]=>
  string(16) "test@example.com"
  [3]=>
  string(8) "username"
}

If you passed parameters by keys you will need to use parse_str function to get key and value in array, for example if you want to get email parameter you will get it as follow

parse_str($argv[2], $param2);
echo $param2['email']; 
//it will print test@example.com

And if you are using it by values only then its pretty simple

echo $argv[2]; 
//it will print test@example.com