On Wed, 24 Jan 2024 г. at 14:01, Ilija Tovilo <tovilo.il...@gmail.com>
wrote:

> Hi Sara
>
> Thank you for your feedback.
>
> On Tue, Jan 23, 2024 at 8:41 PM Sara Golemon <poll...@php.net> wrote:
> >
> > On Mon, Jan 22, 2024 at 1:24 AM Ilija Tovilo <tovilo.il...@gmail.com>
> wrote:
> >
> > > I started the vote on the "RFC1867 for non-POST HTTP verbs" RFC.
> > > https://wiki.php.net/rfc/rfc1867-non-post
> > >
> >
> > 1/ This function reaches into the SAPI to pull out the "special" body
> > data.  That's great, but what about uses where providing an input string
> > makes sense.  For that, and for point 2, I'd suggest
> > `http_parse_query(string $query, ?array $options = null): array|object`.
>
> The RFC previously included support for the $input_stream variable
> (string is not very appropriate for multipart because the input may be
> arbitrarily large). The implementation wasn't complex, but it required
> duplication of all the reads to support both a direct read from the
> SAPI and a read from the stream, duplication of some limit checks and
> special passing of the streams to avoid SAPI API breakage.
>
> As for actual use cases, I found limited evidence that this function
> would be useful for worker-based services _right now_. Most services
> handle request parsing in some other layer. For example, RoadRunner
> has a Go server that stores the file to disk, and then just passes the
> appropriate path to PHP in the $_FILES array. It seems to me that a
> custom input would be useful exclusively for a web server written in
> PHP. The one that was pointed out to me (AdapterMan) handles requests
> as strings, which would not scale for multipart requests.
>
> I don't mind getting back to this if AdapterMan rewrites request
> handling to use streams. Adding back the $input_stream parameter can
> be done with no BC breaks. But for the time being, I don't think the
> motivation is big enough to justify the added complexity.
>
> Additionally, because multipart is used exclusively as a request
> content type, it isn't useful in a general sense either, because a PHP
> request will typically only receive one request (but potentially
> multiple responses, in case it communicates with other servers).
>
> > 2/ `request_` represents a new psuedo-namespace, functions are easier to
> > find and associate if we keep them grouped.  I recommend 'http_` because
> it
> > compliments the very related function `http_build_query()`, and for the
> > version of this function which refers directly to the request:
> > `http_parse_request(?array $options = null) : array|object`.
>
> That's fair. If the name bothers you I can create an amendment RFC. I
> think http_parse_body() would be a bit more appropriate, because
> request implies more than just the body.
>
> Ilija
>
> --
> PHP Internals - PHP Runtime Development Mailing List
> To unsubscribe, visit: https://www.php.net/unsub.php
>
>
Hi, Ilija!

I think that removing $input_stream should be revisited.
The problem with Go/RoadRunner/PHP is that PHP parses `a[]=1&a[]=2&a[]=3`
differently from other languages.

PHP: [a => [1,2,3]]
GO: map[a[]:[1 2 3]]

See https://github.com/roadrunner-server/roadrunner/issues/1696 and
https://github.com/roadrunner-server/roadrunner/issues/1963#issuecomment-2209403600
for more details.

To mitigate this issue, RoadRunner allows raw body on the PHP side
by setting `http.raw_body = true`. Here's where request_parse_body would be
useful if it accepts other streams.
--
Best regards,
Valentin

Reply via email to