8

我想将两个不同的参数传递给我的脚本,并根据发送的参数,我需要我的脚本做一些事情。但我不知道如何定义我的条件语句。

更准确地说,我希望我的脚本在我传递“搜索”参数时进行搜索,或者在我传递“显示”参数时显示结果。

这是我的代码:

if ($argc > 1) {
  if ($argv[0] == 'show') {
    for ($i = 0; $i <= $argv[2]; $i++) {
      //do something
    }
  }
  elseif($argv[0] == 'search') {
    //do something
  }
} else {
  echo "no argument passed\n";
}

“IF”语句没有检查我的传递参数是“搜索”还是“显示”

4

5 回答 5

5

$argv[0] is the name of the script, that's why your code doesn't work.

If I have a file script.php:

<?php
if ($argc > 1) {
  if ($argv[1] == 'show') {
    for ($i = 0; $i <= $argv[2]; $i++) {
      print "show passed\n";
    }
  }
  elseif($argv[1] == 'search') {
    print "search passed";
  }
} else {
  echo "no argument passed\n";
}

Testing gives:

$php script.php

no argument passed

$php script.php search

search passed

$php script.php show 2

show passed
show passed
show passed
于 2013-04-14T11:47:32.577 回答
3

为什么不?

$aPassedOptions = getopt("", ['show', 'search']);
$bShow = isset($aPassedOptions['show']);
$bSearch = isset($aPassedOptions['search']);
var_dump($aPassedOptions, $bShow, $bSearch);


script.php --show
script.php --search
script.php --show --search

更多 @ http://www.php.net/getopt (例如,需要参数等)

于 2016-12-16T10:12:30.713 回答
2

我会改用switch/case你的条件($argc)是错误的,因为你需要动作名称和参数并且$argv[0]是脚本名称,所以你的commandisargv[1]和它的参数argv[2]以及向上。我也会argc/argv$_SERVER全球获得

if ($_SERVER['argc'] >= 3) {
  switch( $_SERVER['argv'][1] ) {
     case 'show':
        ...
        break;

     case 'search':
        ...
        break;
   }
} else {
   // no args case
}

一般来说,尝试 ie 通常很有用

var_dump($_SERVER);
于 2013-04-14T11:44:17.107 回答
2

试试$argv[1]

http://php.net/manual/en/reserved.variables.argv.php

$argv[0]包含被调用的脚本的名称

于 2013-04-14T11:44:41.237 回答
1

Use $argv[1].

In UNIX model (like...C), the traditional ARGV array starts with the first binary invoked, then passes along the arguments. In PHP case, if you call your script through PHP ("php script.php") instead of hash-banging it ("./script.php"), php automatically removes itself from $argv[0].

So in your case:

$ cat argv.php
#!/usr/bin/php
<?php
    print_r($argv);
?>
$ php argv.php search
Array
(
    [0] => argv.php
    [1] => search
)
$ ./argv.php search
Array
(
    [0] => ./argv.php
    [1] => search
)
$
于 2013-04-14T11:47:30.293 回答