Я хочу передать параметры из интерфейса командной строки 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.
Для комментариев это делает следующее:
Вы можете проанализировать пользовательский ввод в вашей программе, ища конкретные строки, такие как -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 ). Объединение этих двух массивов на третьей строке приводит к созданию массива со всеми ожидаемыми параметрами, заданными либо по умолчанию, либо по аргументам, предоставленным из командной строки / терминала, если они доступны.