PHP, передать параметры из командной строки в PHP скрипт
Я хочу передать параметры из интерфейса командной строки PHP, а затем читать значения с помощью PHP script, что-то вроде этого:
<?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"
Чтобы пользователь был хорошо информирован о вводе правильных параметров в правильные места. Каков подходящий способ анализа этих параметров?
Ответы
Ответ 1
При вызове PHP script из командной строки вы можете использовать $argc, чтобы узнать, сколько параметров передано, и $argv для доступа к ним. Например, выполните следующие script:
<?php
var_dump($argc); //number of arguments passed
var_dump($argv); //the arguments passed
?>
Вот так: -
PHP скрипт.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 скрипт.php arg1=4
Вам нужно будет взорвать аргумент на знаке равенства: -
list($key, $val) = explode('=', $argv[1]);
var_dump(array($key=>$val));
Таким образом, вы можете иметь все, что хотите, перед значком равенства, не анализируя его, просто проверьте правильность пары ключ = > . Однако, это все немного отходов, просто проинструктируйте пользователя о правильном порядке передать аргументы.
Ответ 2
В то время как ответ верный, и вы можете сделать синтаксический анализ вручную, PHP также предлагает функцию getopt()
, которая может быть действительно полезной здесь.
Также существуют объектно-ориентированные альтернативы (написанные на PHP, доступные в нескольких библиотеках), которые могут оказаться вам нужными. Googling для "php getopt" даст полезные результаты.
Ответ 3
Я использую этот довольно сжатый метод:
if($argc>1)
parse_str(implode('&',array_slice($argv, 1)), $_GET);
который обрабатывал бы вызов, например:
PHP скрипт.php item1=4 item2=300
Отправляя его в $_GET, вы автоматически обрабатываете доступ к сети или CLI.
Для комментариев это делает следующее:
- Если количество аргументов больше одного (поскольку первым элементом является имя script), выполните
- Возьмите массив аргументов, исключая первый элемент
- Превратите его в стандартный формат строки запроса с амперсандами.
- используйте parse_str для извлечения в массив $_GET
Ответ 4
Вы можете анализировать пользовательский ввод в своей программе, ища конкретные строки, такие как -inputFirstName="x"
(например, с использованием регулярных выражений), а затем установить правильную переменную в x.
Ответ 5
Функция getopt()
, вероятно, является наиболее правильным ответом в случае вопроса. Тем более, что он был создан независимо от платформы PHP 5.3. В частном случае этого вопроса и разбора нескольких параметров одним из способов использования этой функции будет следующее:
$defaultValues = array("inputFirstName" => "");
$givenArguments = getopt("", array("inputFirstName:"));
$options = array_merge($defaultValues, $givenArguments);
$inputFirstName = $options['inputFirstName'];
Вызов для установки $inputFirstName со значением "Robby":
> PHP скрипт.php --inputFirstName="Robby"
Объяснение
Значения по умолчанию для всех ожидаемых параметров устанавливаются в массиве $defaultValues
. Ввод, отправленный через аргументы командной строки, собирается функцией PHP getopt
и сохраняется $givenArguments
. Обратите внимание, что двоеточие (:
) в конце строки "inputFirstName:"
указывает, что это необязательный аргумент. Без двоеточия здесь будет обнаружено только наличие аргумента, а не фактическое значение (больше информации в Руководстве по PHP). Объединение этих двух массивов вместе в третьей строке приводит к массиву со всеми ожидаемыми параметрами, заданными либо значениями по умолчанию, либо аргументами, предоставленными из командной строки/терминала, если они доступны.