После выполнения приведенных ниже инструкций вы можете позвонить так:
phpcl yourscript.php _GET = '{"key1": "val1", "key2": "val2"}'
Чтобы это работало, вам нужно выполнить код перед вызовом скрипта. Я использую оболочку bash в linux и в своем файле .bashrc я установил интерфейс командной строки, чтобы заставить php ini flag auto_prepend_file загружать мой файл начальной загрузки командной строки (этот файл должен быть найден где-то в вашем php_include_path):
alias phpcl='php -d auto_prepend_file="system/bootstrap/command_line.php"'
Это означает, что каждый вызов из командной строки будет выполнять этот файл перед запуском вызываемого вами скрипта. auto_prepend_file - отличный способ загрузить вашу систему, я использую его в своем стандартном php.ini, чтобы установить мои окончательные обработчики исключений и ошибок на системном уровне. Установка этой командной строки auto_prepend_file переопределяет мои обычные настройки, и я выбираю просто обрабатывать аргументы командной строки, чтобы можно было установить $ _GET или $ _POST. Вот файл, который я добавляю:
<?php
// Parse the variables given to a command line script as Query Strings of JSON.
// Variables can be passed as separate arguments or as part of a query string:
// _GET='{ "key1": "val1", "key2": "val2" }' foo='"bar"'
// OR
// _GET='{ "key1": "val1", "key2": "val2" }'\&foo='"bar"'
if ($argc > 1)
{
$parsedArgs = array();
for ($i = 1; $i < $argc; $i++)
{
parse_str($argv[$i], $parsedArgs[$i]);
}
foreach ($parsedArgs as $arg)
{
foreach ($arg as $key => $val)
{
// Set the global variable of name $key to the json decoded value.
$$key = json_decode($val, true);
}
}
unset($parsedArgs);
}
?>
Он перебирает все передаваемые аргументы и устанавливает глобальные переменные, используя переменные переменные (обратите внимание на $$). На странице руководства написано, что переменные переменные не работают с суперглобальными переменными, но, похоже, у меня работает с $ _GET (полагаю, это работает и с POST). Я хочу передать значения в формате JSON. Возвращаемое значение json_decode будет NULL в случае ошибки, вы должны выполнить проверку ошибок при декодировании, если вам это нужно.