Pass variable to php script running from command line

hd. picture hd. · Jul 26, 2011 · Viewed 136.3k times · Source

I have a PHP file that is needed to be run from command line (via crontab). I need to pass type=daily to the file but I don't know how. I tried:

php myfile.php?type=daily

but this error was returned:

Could not open input file: myfile.php?type=daily

What can I do?

Answer

PtPazuzu picture PtPazuzu · Jul 26, 2011

The ?type=daily argument (ending up in the $_GET array) is only valid for web-accessed pages.

You'll need to call it like php myfile.php daily and retrieve that argument from the $argv array (which would be $argv[1], since $argv[0] would be myfile.php).

If the page is used as a webpage as well, there are two options you could consider. Either accessing it with a shell script and wget and call that from cron:

#!/bin/sh
wget http://location.to/myfile.php?type=daily

Or check in the php file whether it's called from the commandline or not:

if (defined('STDIN')) {
  $type = $argv[1];
} else { 
  $type = $_GET['type'];
}

(Note: You'll probably need/want to check if $argv actually contains enough variables and such)