Как передать параметры из командной строки в $_POST в php-script?
Я знаю, это может показаться немного странным, но мне нужно передать некоторые параметры в массив $_POST. Подобно тому, как это делает apache или любой другой веб-сервер.
К сожалению, я не смог найти libapache2-mod-php5
где-нибудь для моего Ubuntu.
Ответы
Ответ 1
Это нелегко. Вы можете вызывать двоичный код php-cgi
и обрабатывать поддельный запрос POST. Но вам нужно настроить множество переменных среды CGI:
echo 'var1=123&var2=abc' | REQUEST_METHOD=POST SCRIPT_FILENAME=script.php REDIRECT_STATUS=CGI CONTENT_TYPE=application/www-form-urlencoded php-cgi
Примечание. Недостаточно, не работает. Но что-то в этом роде...
Это, конечно, проще, если вы просто скопируете script и загрузите массив $_POST из предопределенной переменной среды.
$_POST = parse_url($_SERVER["_POST"]);
Затем вы можете вызвать его как _POST=var=123 PHP скрипт.php
для простоты.
Ответ 2
Я искал решение для этого и пришел, потому что это был первый хит в Google. Второй вариант для меня был чем-то полезен для меня, потому что он имеет очень простое решение, если у вас есть доступ к PHP script и его можно изменить.
Просто вставьте следующие строки в начало script:
/* if started from commandline, wrap parameters to $_POST and $_GET */
if (!isset($_SERVER["HTTP_HOST"])) {
parse_str($argv[1], $_GET);
parse_str($argv[1], $_POST);
}
Эта небольшая часть кода делает трюк (вы можете решить, хотите ли вы использовать $_GET или $_POST или, как мне было нужно, оба.
После изменения script вы можете вызвать его из командной строки, передавая ваши аргументы:
php yourscript.php 'arg1=x&arg2=y'
Удачи!
Ответ 3
использовать завиток для публикации данных
curl --data "name = ii" "param1 = value1 & param2 = value2" http://test.com/sample.php