20.1. Parsing Program Arguments
Problem
You want to process arguments passed on the command line.
Solution
Look in $_SERVER['argc']
for the number of
arguments and $_SERVER['argv']
for their values.
The first argument, $_SERVER['argv'][0]
, is the
name of script that is being run:
if ($_SERVER['argc'] != 2) { die("Wrong number of arguments: I expect only 1."); } $size = filesize($_SERVER['argv'][1]); print "I am $_SERVER[argv][0] and report that the size of "; print "$_SERVER[argv][1] is $size bytes.";
Discussion
In order to set options based on flags passed from the command line,
loop through $_SERVER['argv']
from
1
to $_SERVER['argc']
:
for ($i = 1; $i < $_SERVER['argc']; $i++) { switch ($_SERVER['argv'][$i]) { case '-v': // set a flag $verbose = 1; break; case '-c': // advance to the next argument $i++; // if it's set, save the value if (isset($_SERVER['argv'][$i])) { $config_file = $_SERVER['argv'][$i]; } else { // quit if no filename specified die("Must specify a filename after -c"); } break; case '-q': $quiet = 1; break; default: die('Unknown argument: '.$_SERVER['argv'][$i]); break; } }
In this example, the -v
and -q
arguments are flags that set $verbose
and
$quiet
, but the -c
argument is
expected to be followed by a string. This string is assigned to
$config_file
.
See Also
Recipe 20.3 for more parsing arguments with
getopt
; documentation on
$_SERVER['argc']
and
$_SERVER['argv']
at
http://www.php.net/reserved.variables
.
Get PHP Cookbook now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.