Как передать параметры строки запроса в бинарный файл PHP? - PullRequest
4 голосов
/ 03 октября 2010

Я разрабатываю веб-сервер, который вызывает двоичный файл PHP (через CGI) для обработки сценария.

Вот проблема:

PHP-скрипт не выбирает параметры командной строки. Например, если клиент запрашивает path/to/file.php?test=value, массив $_GET будет пустым.

Я попытался передать параметры в переменную окружения (QUERY_STRING), но они все еще не отображаются.

Как передать параметры строки запроса в приложение PHP?

Ответы [ 4 ]

4 голосов
/ 03 октября 2010

Существуют различные SAPI для PHP. Одним из них является cli SAPI, который, по-видимому, и используется, поскольку SAPI не будет заполнять $ _GET, $ _POST ..., потому что это для сценариев командной строки.

В вашем случае вам нужен PHP cgi SAPI. (например, вам нужно заменить php на php-cgi [1] в вашем шебанге)

[1] В большинстве дистрибутивов это называется php-cgi, если вы сами компилируете PHP, вам нужно включить cgi.

4 голосов
/ 03 октября 2010

Вы имеете в виду параметры командной строки или $ _ GET параметры?Это не одно и то же.

При использовании веб-браузера используется $_GET.Но если вы передаете аргументы командной строки, такие как /path/to/file.php arg1 arg2, тогда вы должны использовать $argv$argc содержит длину элементов).

$argv[0] всегда содержит запущенный файл, вэтот пример /path/to/file.php.
$argv[1] - это arg1, в этом случае $argv[2] - arg2.Таким образом, $argc содержит 3.

Полезные ресурсы:

3 голосов
/ 27 мая 2012

Как упоминалось в Не называйте меня DOM »Тестирование CGI-скриптов с помощью QUERY_STRING, в PHP , вам может понадобиться использовать parse_str для анализа переменных среды, передаваемых через режим cli - пример в терминале Linux:

$ QUERY_STRING="aa=bb&cc=dd" php -r 'parse_str(getenv("QUERY_STRING"),$_GET); print_r($_GET);'
Array
(
    [aa] => bb
    [cc] => dd
)
1 голос
/ 07 августа 2017

- Вариант 1: php-cgi -

Используйте php-cgi вместо php для запуска вашего скрипта.Это самый простой способ, поскольку вам не нужно специально модифицировать свой php-код для работы с ним:

php-cgi -f /my/script/file.php a=1 b=2 c=3

- вариант 2: если у вас есть веб-сервер -

Если файл php находится на веб-сервере, вы можете использовать 'wget' в командной строке:

wget 'http://localhost/my/script/file.php?a=1&b=2&c=3'

ИЛИ:

wget -q -O - "http://localhost/my/script/file.php?a=1&b=2&c=3"

-- Доступ к переменным в php -

В обоих вариантах 1 и 2 вы получаете доступ к следующим параметрам:

$a = $_GET["a"];
$b = $_GET["b"];
$c = $_GET["c"];
...