PHP, передать параметры из командной строки в скрипт PHP

Я хочу передать параметры из интерфейса командной строки PHP, а затем читать значения с помощью скрипта PHP, примерно так:

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

Я передаю переменную из CLI следующим образом:

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

Вышеупомянутые работы, я получаю Robby как результат.

Но я хочу сделать что-то вроде этого:

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

Чтобы пользователь был хорошо информирован о вводе правильных параметров в правильные места. Каков подходящий способ анализа этих параметров?

    При вызове скрипта PHP из командной строки вы можете использовать $ argc, чтобы узнать, сколько параметров передано, и $ argv для доступа к ним. Например, выполните следующий скрипт:

     <?php var_dump($argc); //number of arguments passed var_dump($argv); //the arguments passed ?> 

    Как это:-

     php script.php arg1 arg2 arg3 

    Дает следующий результат

     int(4) array(4) { [0]=> string(21) "d:\Scripts\script.php" [1]=> string(4) "arg1" [2]=> string(4) "arg2" [3]=> string(4) "arg3" } 

    Подробнее см. $ Argv и $ argc .

    Чтобы делать то, что вы хотите, скажем

     php script.php arg1=4 

    Вам нужно будет взорвать аргумент на знаке равенства: –

     list($key, $val) = explode('=', $argv[1]); var_dump(array($key=>$val)); 

    Таким образом, вы можете иметь все, что хотите, перед значком равенства, не анализируя его, просто проверьте правильность пары ключей =>. Однако, это все немного отходов, просто проинструктируйте пользователя о правильном порядке передать аргументы.

    В то время как ответ правильный, и вы можете сделать синтаксический анализ вручную, PHP также предлагает функцию getopt() которая может быть действительно полезной здесь.

    Существуют также объектно-ориентированные альтернативы (написанные на PHP, доступные в нескольких библиотеках), которые могут оказаться тем, что вам нужно. Googling для «php getopt» даст полезные результаты.

    Я использую этот довольно сжатый метод:

     if($argc>1) parse_str(implode('&',array_slice($argv, 1)), $_GET); 

    Который обрабатывал бы вызов, например:

     php script.php item1=4 item2=300 

    Отправляя его в $ _GET, вы автоматически обрабатываете доступ к сети или CLI.

    Для комментариев это делает следующее:

    • Если количество аргументов больше одного (поскольку первый элемент – это имя скрипта), продолжайте
    • Возьмите массив аргументов, исключая первый элемент
    • Превратите его в стандартный формат строки запроса с амперсандами
    • используйте parse_str для извлечения в массив $ _GET

    Вы можете проанализировать пользовательский ввод в вашей программе, ища конкретные строки, такие как -inputFirstName="x" (например, с использованием регулярных выражений), а затем установить правильную переменную в x.

    Функция getopt() вероятно, является наиболее правильным ответом в случае вопроса. Тем более, что он был создан независимо от платформы PHP 5.3. В частном случае этого вопроса и разбора нескольких параметров одним из способов использования этой функции будет следующее:

     $defaultValues = array("inputFirstName" => ""); $givenArguments = getopt("", array("inputFirstName:")); $options = array_merge($defaultValues, $givenArguments); $inputFirstName = $options['inputFirstName']; 

    Вызов для установки $ inputFirstName со значением «Robby»:

     > php script.php --inputFirstName="Robby" 

    объяснение

    Значения по умолчанию для всех ожидаемых параметров устанавливаются в массиве $defaultValues . Ввод, отправленный через аргументы командной строки, собирается функцией getopt PHP и сохраняется в $givenArguments . Обратите внимание, что двоеточие ( "inputFirstName:" в конце строки "inputFirstName:" указывает, что это необязательный аргумент. Без двоеточия здесь будет обнаружено только наличие аргумента, а не фактическое значение ( дополнительная информация в Руководстве по PHP ). Объединение этих двух массивов на третьей строке приводит к созданию массива со всеми ожидаемыми параметрами, заданными либо по умолчанию, либо по аргументам, предоставленным из командной строки / терминала, если они доступны.