Я хочу запустить 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').