Я пытаюсь создать веб-сервер, который обслуживает сценарии PHP. В настоящее время он работает следующим образом:
- Клиент запрашивает /index.php?test=value
- Сервер вызывает
php index.php
- Сервер передает заголовки HTTP-запроса как STDIN процессу PHP
- Сервер читает вывод
php
из STDOUT и возвращает его клиенту
Все это работает, за исключением того, что параметры не передаются в скрипт PHP, потому что:
var_dump($_GET);
возвращает:
массив (0) {}
Как $_GET
параметры передаются в двоичный файл PHP, когда он вызывается?
Ответы:
Какой бинарный PHP вы используете? CLI или CGI? Я подозреваю, что вам нужна CGI-версия двоичного кода для PHP, чтобы правильно обрабатывать переменные среды и данные POST, если вы передадите это.
В
php-cgi
бинарном реализует интерфейс CGI, который позволяет передавать параметры в командной строке:Которые в конечном итоге в
$_GET
:Вы можете прочитать о том, как работает CGI, чтобы реализовать это на своем веб-сервере.
Ссылка: RFC3875
источник
Согласно Википедии , ответ - установить
QUERY_STRING
переменную окружения:или в отдельных шагах:
Это работает, если вы используете
php-cgi
команду, потому что это является частью спецификации CGI. Обычнаяphp
команда игнорирует эту переменную, но ваш скрипт может использовать ее.источник
Если вы пройдете php script.php test = asdf
Если вы передаете его в STDIN, вам нужно прочитать STDIN и разобрать заголовки самостоятельно. REQUEST_URI будет содержать данные, которые вам нужны, и вы можете передать их.
источник
$_GET
как они есть, когда PHP используется под Apache./index.php?test=asdf;rm%20-rf%20/