Search code examples
phpparameter-passingcommand-line-interface

PHP, pass parameters from command line to a PHP script


I want to pass parameters from PHP Command Line Interface, and then read in the values using PHP script, something like this:

<?php
  $name1 = $argv[1];    
  echo $name1;
?>

I pass the variable from CLI like this:

C:\xampp\php\php.exe name.php Robby

The above works, I get Robby as the output.

But I want to do something like this:

C:\xampp\php\php.exe name.php -inputFirstName="Robby"

So that the user is well informed to enter the correct parameters in the correct places. What is the appropriate way to parse these parameters?


Solution

  • 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.