Я разрабатываю веб-сервер, который вызывает двоичный файл 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"];