我想将两个不同的参数传递给我的脚本,并根据发送的参数,我需要我的脚本做一些事情。但我不知道如何定义我的条件语句。
更确切地说,我希望我的脚本在我传递“搜索”参数时进行搜索,并在我传递“show”参数时显示结果。
这是我的代码:
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”语句不会检查我的传递参数,无论是“搜索”还是“显示”
答案 0 :(得分:2)
$argv[0]
是脚本的名称,这就是您的代码不起作用的原因。
如果我有一个文件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";
}
测试给出:
$php script.php
没有参数传递
$php script.php search
搜索已通过
$php script.php show 2
show passed
show passed
show passed
答案 1 :(得分:2)
为什么不呢?
$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(例如,需要参数等)
答案 2 :(得分:1)
我会使用switch/case
代替您的条件($argc
),因为您需要操作名称和参数,而$argv[0]
是脚本名称,因此您的command
是argv[1]
及其参数argv[2]
及以上。我还会从argc/argv
全球
$_SERVER
if ($_SERVER['argc'] >= 3) {
switch( $_SERVER['argv'][1] ) {
case 'show':
...
break;
case 'search':
...
break;
}
} else {
// no args case
}
答案 3 :(得分:1)
答案 4 :(得分:0)
使用$ argv [1]。
在UNIX模型中(如... C),传统的ARGV数组从调用的第一个二进制文件开始,然后传递参数。在PHP的情况下,如果你通过PHP(“php script.php”)调用你的脚本而不是哈希打击它(“./script.php”),php会自动从$ argv [0]中删除它。
所以在你的情况下:
$ 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
)
$