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

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

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

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

Ответы

Ответ 1

Script:

<?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 из командной строки.

Ответ 2

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

например:.

var = 3 php -f test.php

В test.php:

$var = getenv("var");

Ответ 3

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

Ответ 4

Также, используя argc и argv, как указано Ionut G. Stan, вы также можете использовать модуль PEAR Console_Getopt, который может анализировать параметры командной строки в стиле unix. Подробнее см. в этой статье.

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

Ответ 5

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

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 в 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').