"?" в выражении PHP

S
На сайте с 27.08.2008
Offline
211
468

Опять требуется помощь "зала".

В недавней теме разбиралась, как обойтись без функции PHP-virtual

Разобралась. Заменила функциями PHP-system и PHP-exec

Но опять затык...

Через эту функцию у меня запускаются CGI-скрипты

Например:

{?php

system ('cgi-bin/script.cgi?parameter=XX');

?}

или

{?php

echo exec ('cgi-bin/script.cgi?parameter=XX');

?}

В virtual такая конструкция работала. А здесь скрипт исполняется только, если без параметров (левее вопросительного знака). С параметрами выдает пустое значение. Хотя сам скрипт написан корректно и при непосредственном запуске выдает то, что нужно.

Я плохо знаю PHP и затрудняюсь разобраться.

Экранировать вопросительный знак обратным слешем пробовала - не помогает.

В чем тут проблема и как ее решить?

Помогите, пожалуйста.

C
На сайте с 29.10.2009
Offline
20
#1

Конструкция script?parameter=XX работает, только если обращение происходит через вебсервер. При этом инициализируется массив GET - то что пришло в URL. Командная строка ничего не знает про GET, URL, поэтому если необходимо передавать параметры скрипту в командной строке, то нужно переписать скрипт так, чтобы он забирал необходимые параметры и их значения из массива $argv

http://php.net/manual/en/reserved.variables.argv.php

http://php.net/manual/ru/features.commandline.php

$ php test.php --foo --bar=baz

["foo"] => true

["bar"] => "baz"

siv1987
На сайте с 02.04.2009
Offline
427
#2
S
На сайте с 27.08.2008
Offline
211
#3

Большое спасибо!

Проблема, действительно, решилась не просто, а очень просто. :)

Переписала выражение

{?php

system ('QUERY_STRING=parameter=XX cgi-bin/script.cgi');

?}

и все прекрасно заработало.

С echo exec точно также все работает.

bsyomov
На сайте с 25.01.2012
Offline
31
#4
Salambo:

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

В документации на функцию virtual() http://php.net/manual/ru/function.virtual.php, в комментариях есть примеры как заменять её exec и установкой переменных окружения.

Прочитайте, и воспользуйтесь, ничего такого уж хитрого, особенно учитывая то, что вы владеете perl.

UPD: Упс, уже решили - поздравляю. =)

N
На сайте с 06.05.2007
Offline
419
#5

Это все касается обычных параметров, но CGI работает не так. Опять же легко догадаться если иметь опыт программирования на perl/cgi.

В комментариях к функции virtual http://php.net/manual/ru/function.virtual.php

есть пример где создают QUERY_STRING и что-то подобное нужно соорудить.

Кнопка вызова админа ()

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий