shell 如何在命令行中传递参数?

y3bcpkx1  于 2023-08-07  发布在  Shell
关注(0)|答案(3)|浏览(108)

我想从shell脚本运行一个PHP程序,每次传递参数并使用$_GET["DBF"]获取参数。举例来说:

$ php prog.php?DBF=clients
$ php prog.php?DBF=suppliers

字符串
我该怎么办?上面的语法不起作用。

368yc8dk

368yc8dk1#

您可以使用如下参数调用脚本:第一个月
没有HTTP请求,所以$_GET等。将不可用。正如CLI的PHP文档中所述,usage$argv将保存脚本的参数。
$argv[0]是脚本名称本身,$argv[1]是第一个参数,等等。
parse_str()参数:

#!/usr/bin/php
<?php

// $argv[0] will hold the script name
// $argv[1] will hold the first argument

// print_r($argv[1]);

// parse the first argument
parse_str($argv[1], $arg);
// print_r($arg);

if(isset($arg['DBF']) && $arg['DBF'] == 'clients') {
    // Do something for the clients
    echo "Clients stuff";
    echo "\n";
} else if(isset($arg['DBF']) && $arg['DBF'] == 'suppliers') {
    // Do something for the suppliers
    echo "Suppliers stuff";
    echo "\n";
}

字符串

iqxoj9l9

iqxoj9l92#

$_GET和$_POST变量是超全局变量,只有在使用PHP通过Apache等服务器处理Web请求时才会创建。
如果你从命令行运行PHP,你可以在脚本名后面添加变量“DBF”作为参数:

$ php prog.php clients

字符串
要访问命令行变量,请调用$argv变量,它是一个数组。数组中的第一项是脚本的名称,以下项是附加到命令行请求的参数:

array(2) {
  [0]=>
  string(8) "prog.php"
  [1]=>
  string(4) "clients"
}


参考:https://www.php.net/manual/en/reserved.variables.argv.php

c86crjj0

c86crjj03#

您可以使用以下代码获取所有参数。

unset($argv[0]);
parse_str(implode('&',$argv),$_REQUEST);

字符串
所有的参数都将在数组$_REQUEST中,它也可以在浏览器中使用。基本上,你可以使用尽可能多的参数,就像你在网站上一样。
你可以这样使用它:

php prog.php DBF=clients id=42


这将在数组$_REQUEST中:

(
    [DBF] => clients
    [id] => 42
)

相关问题