Как передать переменные $_GET в скрипт PHP через командную строку?
Я пытаюсь создать веб-сервер, который обслуживает сценарии PHP. В настоящее время это работает следующим образом:
- Клиент запрашивает /index.php?test=value
- Сервер вызывает
php index.php
- Сервер передает заголовки HTTP-запроса как STDIN процессу PHP
- Сервер читает вывод
php
из STDOUT и возвращает его клиенту
Все это работает, за исключением того, что параметры не передаются в скрипт PHP, потому что:
var_dump($_GET);
возвращает:
массив (0) { }
Как $_GET
параметры передаются в двоичный файл PHP, когда он вызывается?
3 ответа
Какой бинарный PHP вы используете? CLI или CGI? Я подозреваю, что вам нужна CGI-версия двоичного кода для PHP, чтобы правильно обрабатывать переменные среды и данные POST, если вы передадите это.
php-cgi
двоичный файл реализует интерфейс CGI, который позволяет передавать параметры в командной строке:
php-cgi -f index.php left=1058 right=1067 class=A language=English
Который в конечном итоге $_GET
:
Array
(
[left] => 1058
[right] => 1067
[class] => A
[language] => English
)
Вы можете прочитать о том, как работает CGI, чтобы реализовать это на своем веб-сервере.
Ссылка: RFC3875
Согласно Википедии, ответ состоит в том, чтобы установить QUERY_STRING
переменная окружения:
QUERY_STRING='user=foo&pass=bar&left=1234' php-cgi index.php
или в отдельных шагах:
export QUERY_STRING='user=foo&pass=bar&left=1234'
php-cgi index.php
Это работает, если вы используете php-cgi
команда, потому что это часть спецификации CGI. Обычный php
Команда игнорирует эту переменную, но ваш скрипт может использовать ее.
Если вы пройдете php script.php test=asdf
$result = parse_args($argv,$argc,$help);
print_r($result);
Если вы передаете его в STDIN, вам нужно прочитать STDIN и разобрать заголовки самостоятельно. REQUEST_URI будет содержать данные, которые вам нужны, и вы можете передать их.