PHP 7 FPM не показывает тело запроса с кусочной кодировкой - PullRequest
0 голосов
/ 30 января 2019

Код

У меня есть следующий очень простой код в index.php:

<?php

if (!function_exists('getallheaders')) {
    // Outputs all HTTP headers
    function getallheaders()
    {
        $headers = [];
        foreach ($_SERVER as $name => $value) {
            if (substr($name, 0, 5) == 'HTTP_') {
                $headers[str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5)))))] = $value;
            }
        }
        return $headers;
    }
}

echo "Content:\n" . @file_get_contents("php://input") . "\n" .
        "Post:\n" . print_r($_POST, true) . "\n" .
        "Headers:\n" . print_r(getallheaders(), true) . "\n";

die();

Контрольный тест

Я локально запустил сервер следующим образом:

$ php -S localhost:8080

Затем я выполнил следующую команду:

$ curl -H "Transfer-Encoding: chunked" -d "payload to send" http://localhost:8080

И он вернулся, как и ожидалось:

Content:
payload to send
Post:
Array
(
    [payload_to_send] =>
)

Headers:
Array
(
    [Host] => localhost:8080
    [User-Agent] => curl/7.55.1
    [Accept] => */*
    [Transfer-Encoding] => chunked
    [Content-Type] => application/x-www-form-urlencoded
)

Все хорошо здесь!

Я также проверил это на Ubuntu 16.04 на PHP 7.0, и все это прекрасно работает!

Проблема

Всякий раз, когда я запускаютот же код на сервере под управлением PHP 7.1, 7.2 или 7.3 или выше в сочетании с Apache 2, я получаю следующий вывод:

Content:

Post:
Array
(
)

Headers:
Array
(
    [Transfer-Encoding] => chunked
    [Accept] => */*
    [User-Agent] => curl/7.55.1
    [Host] => thedealerapp.test
)

Обратите внимание, что если я удалю заголовок кодировки передачи, он не будет разбит на частивсе работает нормально.Ясно, что существует проблема с PHP и / или apache, которая не допускает чанкированные запросы.

Подобная проблема описана здесь: POST-запрос к PHP7 с чанкованным кодированием не возвращает должным образом результат

Но он помечен как решенный, и я использую более новые версии PHP 7.1, PHP7.2 и PHP 7.3.

Почему это происходит и как я могу это исправить?Большое спасибо!

Обновление

Я выяснил, что эта проблема возникает только с FPM-версиями PHP.Нормальные версии PHP, кажется, работают нормально.

Обновление 2

Благодаря @IVO GELOV мне теперь удалось заставить его работать на nginx.Похоже, что это проблема комбинации php-fpm и Apache.

...