Назад | Перейти на главную страницу

Как передать переменные $ _GET в сценарий PHP через командную строку?

Я пытаюсь создать веб-сервер, обслуживающий сценарии PHP. В настоящее время он работает следующим образом:

  1. Клиент запрашивает /index.php?test=value
  2. Сервер вызывает php index.php
  3. Сервер передает заголовки HTTP-запроса как STDIN процессу PHP.
  4. Сервер читает вывод php из STDOUT и возвращает его клиенту

Все это работает, за исключением того, что параметры не передаются в сценарий PHP, потому что:

var_dump($_GET);

возвращает:

массив (0) {}

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

Какой двоичный файл PHP вы используете? CLI или CGI? Я подозреваю, тебе нужен Версия CGI двоичного файла для PHP для правильной обработки, принять переменные среды и данные POST, если вы их передадите.

В php-cgi binary реализует интерфейс 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 будет содержать нужные вам данные, и вы можете их передать.