Intereting Posts
Каким образом можно документировать файлы, классы и конструкторы? Миграция Laravel: уникальный ключ слишком длинный, даже если указан PHPCI не может писать в 'config.yml' Как прочитать второй лист файла xlsx с PHPExcel? Propel.xml дает мне ошибку – Недопустимый тип для пути "propel.database.connections.cfs.attributes". Ожидаемый массив, но получил строку динамически вставлять данные в таблицу mysql PHP: уникальные посещения / обращения к определенным элементам с помощью файлов cookie / ip запустить скрипт python с помощью кнопки html Замедление Геокодирование партии адреса Codeigniter – добавление 2 файлов в электронную почту, которые были загружены из пользовательской формы на веб-сервер Где найти php_imagick.dll для php 5.5.12 для Windows wampserver 2.5? Использование API Google Directory для извлечения всех пользователей в домене .htaccess url закодированная строка, не переходящая на страницу правильно CodeIgniter проверяет, удалось ли выполнить запрос вставка значений флажка в базу данных

Как передать данные POST в PHP-CGI?

Обновить:

В отчаянии я сделал следующее в оболочке:

REDIRECT_STATUS=true SCRIPT_FILENAME=/var/www/... REQUEST_METHOD=POST GATEWAY_INTERFACE=CGI/1.1 export REDIRECT_STATUS export SCRIPT_FILENAME export REQUEST_METHOD export GATEWAY_INTERFACE echo "test=1" | php-cgi 

… и STILL переменные $_POST не отображаются в результатах этого:

 <?php var_dump($_POST); ?> 

Я пытаюсь создать небольшой веб-сервер, который взаимодействует с двоичным php-cgi . Однако все идет не так хорошо. php-cgi корректно обрабатывает запросы GET. Когда дело доходит до запросов POST, массив $_POST пуст, даже когда вещи получают POSTED.

Я проверил HTTP-заголовки, которые php-cgi двоичный файл php-cgi и они действительно включают данные POST и заголовок Content-type: application/x-www-form-urlencoded .

Что могло бы php-cgi двоичный файл php-cgi видеть, что в запрос включены данные POST?


Я продвигаюсь вперед, я выкопал некоторые вещи из исходного кода PHP :

  • /sapi/cgi/cgi_main.c :

    468: static int sapi_cgi_read_post(char *buffer, uint count_bytes TSRMLS_DC)

(Я не знаю, откуда эта функция вызывается).


Прочитав ответ ниже, я попробовал:

 <?php var_dump($HTTP_RAW_POST_DATA); ?> 

… которые дали результат:

 NULL 

… указывая на то, что здесь работает что-то еще странное.


Я приближаюсь … Я нашел эту функцию в /main/php_content_types.c :

SAPI_API SAPI_POST_READER_FUNC (php_default_post_reader)

… и, похоже, это код, который обрабатывает запросы POST.

Я, наконец, понял это:

По-видимому, необходимо установить переменную среды CONTENT_LENGTH .

Добавление:

 CONTENT_LENGTH=6 export CONTENT_LENGTH 

к моему примеру выше заставляет его работать правильно!

Вы упомянули, что ваша система отлично работает. длина контента должна быть установлена ​​только для POST

Также это может помочь, это спецификация CGI / 1.1. Он показывает, какие переменные среды должны быть установлены:

http://graphcomp.com/info/specs/cgi11.html и этот lib.ru/WEBMASTER/cgi1_1spec/interface.html

Каковы минимальные переменные среды, необходимые для получения запросов GET?

Попробуйте проверить переменную $ HTTP_RAW_POST_DATA.

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