Запустить php-скрипт из командной строки с переменной

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

Версия браузера: script.php?var=3

Командная строка: php -f script.php (но как мне передать переменную, содержащую 3?)

Автор сценария:

 <?php // number of arguments passed to the script var_dump($argc); // the arguments as an array. first argument is always the script name var_dump($argv); 

Команда:

 $ php -f test.php foo bar baz int(4) array(4) { [0]=> string(8) "test.php" [1]=> string(3) "foo" [2]=> string(3) "bar" [3]=> string(3) "baz" } 

Кроме того, взгляните на использование PHP из командной строки .

Помимо argv (как упоминалось в Ionut), вы можете использовать переменные среды:

Например:

 var = 3 php -f test.php 

В test.php:

 $var = getenv("var"); 

Если вы хотите сохранить именованные параметры почти как var = 3 & foo = bar (вместо позиционных параметров, предлагаемых $ argv ) getopt () может вам помочь.

Помимо использования argc и argv, как указано Ionut G. Stan , вы также можете использовать модуль PEAR Console_Getopt, который может анализировать параметры командной строки в стиле unix. См. Эту статью для получения дополнительной информации.

Альтернативно, в Zend Framework есть аналогичные функции в классе Zend_Console_Getopt .

Множество решений помещает аргументы в переменные в соответствии с их порядком. Например,

 myfile.php 5 7 

поместит 5 в первую переменную и 7 в следующую переменную.

Мне нужны именованные аргументы:

 myfile.php a=1 x=8 

так что я могу использовать их как имена переменных в PHP-коде.

Ссылка, которую Ionuţ G. Stan дал на http://www.php.net/manual/en/features.commandline.php

дал мне ответ.

sep16 at psu dot edu:

Вы легко можете проанализировать аргументы командной строки в переменной $ _GET с помощью функции parse_str ().

 <?php parse_str(implode('&', array_slice($argv, 1)), $_GET); ?> 

Он ведет себя точно так же, как вы ожидали бы с помощью cgi-php.

 $ php -f somefile.php a=1 b[]=2 b[]=3 

Это установит $ _GET ['a'] в '1' и $ _GET ['b'] в массив ('2', '3').