Как передать параметры из командной строки в $ _POST в php-скрипте? - PullRequest
29 голосов
/ 14 апреля 2011

Я знаю, что это может звучать немного странно, но мне нужно передать некоторые параметры в массив $ _POST.Подобно тому, как это делает Apache или любой другой веб-сервер.

К сожалению, я нигде не смог найти libapache2-mod-php5 для своего Ubuntu.

Ответы [ 3 ]

44 голосов
/ 18 июля 2013

Я искал решение для этого и пришел, потому что это был первый хит в Google. Второй был как-то более полезен для меня, потому что он имеет действительно простое решение, если у вас есть доступ к сценарию PHP и вы можете его изменить.

Просто вставьте следующие строки в начале вашего скрипта:

/* 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 или, как мне было нужно, оба.
После изменения вашего скрипта вы можете вызвать его из командной строки, передав ваши аргументы:

php yourscript.php 'arg1=x&arg2=y'

Веселись!

18 голосов
/ 14 апреля 2011

Это не легко выполнимо. Вы можете вызвать двоичный файл 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 

Примечание : недостаточно, не работает так. Но что-то в этом роде ...


Конечно, проще, если вы просто исправите скрипт и позволите ему загрузить массив $ _POST из предопределенной переменной среды.

$_POST = parse_url($_SERVER["_POST"]);

Тогда вы можете вызвать его как _POST=var=123 php script.php для простоты.

2 голосов
/ 27 июня 2013

используйте curl для публикации данных
curl --data "name = ii" "param1 = value1 & param2 = value2" http://test.com/sample.php

...