2010-10-03 2 views
4

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

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

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

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

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

ответ

4

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

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

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

+0

Ах, что объясняет его. Благодаря! –

+1

, когда у вас нет php-cgi, но вы хотите имитировать вызов php в контексте cgi, что вы тогда делаете? – ericslaw

+0

Чтобы указать на это, вы должны запустить 'php-cgi file.php a = 1 b = 2'. – ijt

4

Вы говорите о Параметры командной строки или $ _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

Как уже упоминалось в Don’t call me DOM » Testing CGI scripts with QUERY_STRING, in 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

- Вариант 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"]; 
Смежные вопросы