2013-04-14 2 views
2

Я хочу передать два разных аргумента в мой скрипт и на основе отправленного аргумента, мне нужен мой скрипт что-то. Но я не знаю, как определить мое условное утверждение.Проверка аргумента командной строки в PHP

Чтобы быть более точным, я хочу, чтобы мой скрипт выполнял поиск, когда передал аргумент «поиск» и, наоборот, показывал результат при передаче аргумента «показать».

Вот мой код:

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"; 
} 

«если» заявление не проверяет мой проходной аргумент является ли это «поиск» или «шоу»

+0

пытаются использовать 'еще if'. –

+0

Это также не работает. –

+2

Не $ argv [0] имя скрипта? –

ответ

1

$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 

море RCH прошел

$php script.php show 2 

show passed 
show passed 
show passed 
+0

Спасибо большое! :) –

+0

@BabakKhoramdin :) – user4035

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 
} 
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 
) 
$ 
0

Почему нет?

$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 (например, требуется параметра Я и т.д.)

Смежные вопросы