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

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

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

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

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

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

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

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

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

Вы говорите о параметрах командной строки или параметрах $ _GET ? Это не одно и то же.

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

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

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

Как уже упоминалось в parse_str Не называйте меня 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: 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"];