PHP, pass parameters from command line to a PHP script PHP, pass parameters from command line to a PHP script php php

PHP, pass parameters from command line to a PHP script


When calling a PHP script from the command line you can use $argc to find out how many parameters are passed and $argv to access them. For example running the following script:

<?php    var_dump($argc); //number of arguments passed     var_dump($argv); //the arguments passed?>

Like this:-

php script.php arg1 arg2 arg3

Will give the following output

int(4)array(4) {  [0]=>  string(21) "d:\Scripts\script.php"  [1]=>  string(4) "arg1"  [2]=>  string(4) "arg2"  [3]=>  string(4) "arg3"}

See $argv and $argc for further details.

To do what you want, lets say

php script.php arg1=4

You would need to explode the argument on the equals sign:-

list($key, $val) = explode('=', $argv[1]);var_dump(array($key=>$val));

That way you can have whatever you want in front of the equals sign without having to parse it, just check the key=>value pairs are correct. However, that is all a bit of a waste, just instruct the user on the correct order to pass the arguments.


I use this fairly concise method:

if($argc>1)  parse_str(implode('&',array_slice($argv, 1)), $_GET);

Which would handle a call such as:

php script.php item1=4 item2=300

By sending it into $_GET you automatically handle web or CLI access.

For commentary, this is doing the following:

  • If the count of arguments is greater than one (as first item is the name of the script) the proceed
  • Grab the arguments array excluding first item
  • Turn it into a standard query string format with ampersands
  • use parse_str to extract to the $_GET array


While the answer is correct and you could do the parsing by hand, PHP also offers the getopt() function that might actually provide useful here.

There's also object-oriented alternatives (written in PHP, available in a number of libraries) that might turn out to be what you need. Googling for "php getopt" will yield helpful results.