У меня есть скрипт с множеством различных параметризованных функций. Можно ли вызывать любую из этих функций из командной строки и передавать аргументы вместо того, чтобы мне было сложно записать вызовы функций в скрипте?
FYI: Я знаю, как выполнить простой скрипт PHP из командной строки
не совсем вызывает функцию, помните, что script.php имеет около 5 различных функций, и я ищу, чтобы позвонить только 1, возможно ли это
Нет, вы не можете сделать это напрямую. У вас есть несколько вариантов:
Обновить:
Ниже приведен пример использования первого переданного параметра в качестве вызова функции:
if(function_exists( $argv[1] )) call_user_func_array($argv[1], $argv);
php script.php arg1 arg2
к ним как $ argv [1], $ argv [2] … и т. д. в вашем скрипте.
Не 100% уверены, что вы просите, но выполнение будет чем-то вроде
php script.php arg1 arg2 arg3
Вы, кажется, уже знаете это. Метод доступа к этим аргументам в самом скрипте будет состоять в использовании переменной $argv
, поэтому $argv[0]
будет скриптом, $argv[1]
будет "arg1"
и т. Д. Если это не сработает, затем используйте $_SERVER['argv']
.
Что касается опций, вы можете проанализировать их с помощью getopt
Вы можете заставить скрипт командной строки использовать свой первый аргумент как функцию для вызова, а затем аргументы, которые нужно передать. Аргументы появятся в переменной магического массива $argv
.
// Zero'th "argument" is just the name of your PHP script $name_of_php_script = array_unshift($argv); // Next argument will be your callback $callback = array_unshift($argv); // Remaining arguments are your parameters call_user_func_array($callback, $argv);
Очевидно, что вам может потребоваться сделать вещи более сложными для обеспечения безопасности или перейти в специальные значения какого-то рода, но это делает основную логику, которую вы описываете в вопросе.
Вы можете написать опцию, а затем передать ее функции, например myscript.php-function my_function
то в вашем скрипте вызовите функцию like
$argv[1]()
getopt()
принимает параметры CLI.
php /path/to/myscript.php -a foo -b bar -c baz $arguments = getopt("a:b:c:"); print_r($arguments); Array ( [a] => foo [b] => bar [c] => baz )
Сделать его функцией $arguments[a]();
вызвать foo();
вы можете перейти в b также, если у вас есть функция arg.