NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
Packagist · #645 most downloaded on Packagist
A PHP fast CGI client to send requests (a)synchronously to PHP-FPM.
Last release 2 days ago
05 Oct 2026
Ships unpredictably
gaps range from 2 weeks to 4.8 years
Most releases are documented
notes for 27 of 34 stable releases
Nothing withdrawn
no release was ever pulled
10 years old
36 releases · first in 2017
Backwards incompatible changes (BC breaks)
All notable changes to this project will be documented in this file. This project adheres
to Semantic Versioning and Keep a CHANGELOG.
This file covers the 4.x releases. For previous major versions see:
3.x, 2.x, 1.x
PHP >= 8.0 is required. Support for PHP 7.1 - 7.4 was dropped. Version 3.x keeps supporting these PHP versions
and still gets bug fixes, but no new features. - #57
The fileinfo extension is required. It is used to detect the MIME type of files in multipart form-data
requests. - #81
The content of a request is a ComposesRequestContent object instead of a string. - #57
AbstractRequest#__construct() expects an optional content object as second argument:__construct( string $scriptFilename, ?ComposesRequestContent $content = null )AbstractRequest#setContent() expects a ComposesRequestContent object and also sets the content type of theProvidesRequestData#getContent() returns ?ComposesRequestContent instead of string.newWithRequestContent(), introduced in 3.1.0, was removed from all request classes.CONTENT_LENGTH# Previous versions
$request = new PostRequest( '/path/to/script.php', http_build_query( ['key' => 'value'] ) );
$request = PostRequest::newWithRequestContent( '/path/to/script.php', new UrlEncodedFormData( ['key' => 'value'] ) );
$request = new PostRequest( '/path/to/script.php', 'plain text' );
$request->setContentType( 'text/plain' );
# Since 4.0.0
$request = new PostRequest( '/path/to/script.php', new UrlEncodedFormData( ['key' => 'value'] ) );
$request = new PostRequest( '/path/to/script.php', new PlainText( 'plain text' ) );Content types that are not covered by the classes in hollodotme\FastCGI\RequestContents need an own implementation
of the ComposesRequestContent interface.
The interface ConfiguresSocketConnection has the new method getStreamSelectTimeout() : int, which must be added
to own implementations of this interface. - #82
Client#readResponses() and Client#readReadyResponses() throw the exception, if a response cannot be read,
e.g. a TimedoutException. Before, such responses were skipped silently. Unknown socket IDs are still skipped.
Client#waitForResponse() and Client#waitForResponses() time out after the read/write timeout of the connection,
if no timeout is passed. The failure callbacks of requests without response are notified with a TimedoutException
then. Before, both methods waited until the response was received, also for scripts that run longer than the
read/write timeout before they send output. Pass a timeout that is long enough for your scripts.
The interface ProvidesResponseData has the new method getStatusCode() : int, which must be added to own
implementations of this interface.
The public constant Socket::STREAM_SELECT_USEC was removed in favour of the configurable stream select timeout
of the socket connections. - #82
Classes that extend AbstractRequest or a request class must adapt overridden setContent() and getContent()
methods and calls of parent::__construct() to the content object. New public methods may collide with methods of
own subclasses: Client#tryRequest(), Client#tryAsyncRequest(), AbstractRequest#setQueryParams(),
AbstractRequest#getQueryParams(), AbstractRequest#getQueryString() and Response#getStatusCode(). - #57
Response#getStatusCode(), which returns the status code of the Status header, or 200 if there is none.PlainText for content type text/plain.NetworkSocket andUnixDomainSocket. It defines how long the client waits when checking for responses. The default isDefaults::STREAM_SELECT_TIMEOUT (200 ms), which is the value used in previous versions. - #82, #18AbstractRequest#setQueryParams(). They are sentQUERY_STRING and appended to the REQUEST_URI. AbstractRequest#getQueryParams() andAbstractRequest#getQueryString() return the parameters and the encoded query string. - #83Client#tryRequest() and Client#tryAsyncRequest(), which send a request again on another socket, ifReadFailedException is thrown, if amatch and mixed.
chr() when encoding packets are limited to one byte, because values out of this range aremake test-compatibility).make phpcs, make phpcbf). - #75, #98make docs-serve, make docs-build) and deployed to GitHub Pages. The README gives a short overview.docker compose plugin instead of the standalone docker-compose binary.Most of these fixes were also released for 3.x in version 3.1.8.
Client#waitForResponse() and Client#waitForResponses() did not return, if the server did not respond, even if aTimedoutExceptionReadFailedException is thrown now. - #78, #95NameValuePairEncoder#decodePairs() decoded names and values of 16 MiB and more with a wrong length.PacketEncoder#encodePacket()"0" was not sent.TimedoutException or WriteFailedException is thrown now.readResponse() and the other methods reading responses applied to writing the nextreadReadyResponses(), and its callbacks were notified again by handleReadyResponses() andwaitForResponses().Client#hasResponse() and Client#waitForResponse() checked the stream of a socket whose response was already readreadResponse(). hasResponse() returned false, and true once the server closed the idle connection.waitForResponse() blocked until then. Such a socket has its response now.ReadFailedException is thrown now.Client#getSocketIdsHavingResponse() and the methods based on it could throw a ValueError on PHP 8, if theReadFailedException is thrown now. - #78, #95One column per quarter.
Please take notice of the backwards incompatible changes (BC breaks) documented below in the changelog of 3.0.0-alpha & 3.0.0-beta .
All notable changes to this project will be documented in this file. This project adheres
to Semantic Versioning and Keep a CHANGELOG.
Backport of fixes from version 4.0.0.
Client#waitForResponse() and Client#waitForResponses() did not return, if the server did not respond, even if aTimedoutException after it now. Without a timeout, they still wait until the response is received.ReadFailedException is thrown now.NameValuePairEncoder#decodePairs() decoded names and values of 16 MiB and more with a wrong length.PacketEncoder#encodePacket()"0" was not sent.TimedoutException or WriteFailedException is thrown now.readResponse() and the other methods reading responses applied to writing the nextreadReadyResponses(), and its callbacks were notified again by handleReadyResponses() andwaitForResponses().Client#hasResponse() and Client#waitForResponse() checked the stream of a socket whose response was already readreadResponse(). Such a socket has its response now.Client#getSocketIdsHavingResponse() and the methods based on it could throw a ValueError on PHP 8, if theTimedoutException was thrown.ReadFailedException is thrown now.These changes of the behaviour are fixes, but you may notice them:
Client#waitForResponse() and Client#waitForResponses() ends the waiting. The failureTimedoutException then. Without a timeout, bothClient#hasResponse() returns true for a socket whose response was already read with readResponse().false until the server closed the connection, and true afterwards.Client#getSocketIdsHavingResponse(), readReadyResponses() and handleReadyResponses() only consider socketsReadFailedException), a response that is not completed within the read/write timeout (TimedoutException),TimedoutException or WriteFailedException) and an end-request record withoutReadFailedException).PacketEncoder#encodePacket() returns several records for content that is longer than 65535 bytes, instead of onedocker compose plugin, downloads its tools directly instead of using Phive and re-enablesfastcgi.logging in the php-fpm images used for the tests.Content-Transfer-Encoding: base64 header from multipart block for filesmime_content_type(), if availablenull nor a resourcedocker-compose.yml with composer archives via .gitattributes.gitattributes file to exclude non-relevant files/directories from archives/releases installed by composer - #58bin/fcgiget in composer.json as it is a potential security issue (because bin/fcgiget accepts anyAbstractRequest due to a final constructor. - #56newWithRequestContent to all request classes in order to simplify the use of the new requesterror_reporting=-1 for CI and tests in order to capture deprecation warningsPlease take notice of the backwards incompatible changes (BC breaks) documented below in the changelog
of 3.0.0-alpha & 3.0.0-beta.
The socket conection parameter was moved from the Client's constructor to
Client#sendRequest(ConfiguresSocketConnection $connection, ProvidesRequestData $request) : ProvidesResponseDataClient#sendAsyncRequest(ConfiguresSocketConnection $connection, ProvidesRequestData $request) : intin order to allow sending (equal) requests to different FastCGI servers using the same Client instance. - #45
Removed method ProvidesResponseData#getRequestId() : int and Response#getRequestId() : int respectively in order
to avoid confusion about the semantics of the term "request ID" and misusage by assuming it is a unique ID for each
request (which it is not). Also the first constructor parameter of the Response class was removed with this change.
Renamed all $requestId(s) parameters to $socketId(s) in order to reflect the correct semantics of the ID. - #39
Renamed method Client#getRequestIdsHavingResponse() : array<int>
to Client#getSocketIdsHavingResponse() : array<int> in order to reflect the correct semantics of the returned array
of IDs. - #39
Method Response#getHeaders() : array will now return a two-dimensional array with grouped values to support
multi-value headers. Previous versions returned a one-dimensional key-value array.
# Previous versions
[
'Status' => 'HTTP/2 200 OK',
'Set-Cookie' => 'tasty_cookie=strawberry',
]
# Since 3.0.0-alpha
[
'Status' => [
'HTTP/2 200 OK',
],
'Set-Cookie' => [
'yummy_cookie=choco',
'tasty_cookie=strawberry',
],
]Method Response#getHeader(string $headerKey) : array will now return an array containing all values for the given
header key to support multi-value headers. Previous versions returned the last value as a string.
echo $response->getHeader('Set-Cookie');
# Previous versions
'tasty_cookie=strawberry'
# Since 3.0.0-alpha
[
'yummy_cookie=choco',
'tasty_cookie=strawberry'
]Method Response#getRawResponse() : string is no longer available and its usage must be replaced
with Response#getOutput(). The method was deprecated since version 2.6.0.
Response#getHeaderLine(string $headerKey) : string that returns all values, separated by comma, for the givenResponse#getHeader(string $headerKey) : arrayResponse#getHeaderLine(string $headerKey) : string. - #35Response#getRawResponse() : string that was deprecated in version 2.6.0 in favourResponse#getOutput() : string. - #36stream_select returning false in case of a system call interrupt. - #41pm.max_children setting. - #40Two new methods to Response class - #27
Response#getOutput() which is identical to Response#getRawResponse() and will return the complete output fromSTDOUT stream of the response.Response#getError() which will return the complete output of the STDERR stream of the response.Second parameter $errorBuffer in tha pass through callback signature - #27
$callback = function( string $outputBuffer, string $errorBuffer ) {};This parameter will contain the contents of the STDERR stream packets.
Response#getRawResponse() in favour of consistant naming. This method will be removed in v3.0.0 - #27ProcessManagerException that was introduced in v2.5.0 - #27bin/fcgiget to accept full URL paths and print STDOUT and STDERR outputNew ProcessManagerException in case the php-fpm responds with packages of type STDERR. This refers mainly to the
error Primary script unknown resp. the response File not found..
CI builds for PHP 7.3
20000 and was updated to 200000 asphp://input on worker side when client sends content larger than 65535 bytes - #15getHost() and getPort() with getSocketAddress() inhollodotme\FastCGI\Interfaces\ConfiguresSocketConnection - #9unix:// must be omitted for the first parameterhollodotme\FastCGI\SocketConnections\UnixDomainSocketfsockopen() with stream_socket_client() for connecting to php-fpm. - #9addResponseCallbacks(callable ...$callbacks) to all request classes to enable response evaluation delegation
addFailureCallbacks(callable ...$callbacks) to all request classes to enable exception handling delegationreadResponse(int $requestId, ?int $timeoutMs = null) : ProvidesResponseData to read and retrieve a singlereadResponses(?int $imeoutMs = null, int ...$requestIds) : \Generator to read and yield multiple responsesreadReadyResponses(?int $imeoutMs = null) : \Generator to check for ready responses, read and yield themwaitForResponses(?int $timeout = null) to Client class for waiting for multiple responses and calling thegetRequestIdsHavingResponse() : array to enable reactive read of responses as they occurhasUnhandledResponses() : bool to check for outstanding responseshandleResponse(int $requestId, ?int $timeoutMs = null) to fetch a specific response and notify the respectivehandleResponses(?int $timeoutMs = null, int ...$requestIds) to fetch a specific responses and notify thehandleReadyResponses(?int $timeoutMs = null) to check for ready responses, fetch them and notify thewaitForResponse(int $requestId, ?int $timeoutMs = null) is not returning a response anymore, but will callreadResponse(int $requestId, ?int $timeoutMs = null): ProvidesResponseData if you want to get the responsesendRequest and sendAsyncRequest expect to get an object ofhollodotme\FastCGI\Interfaces\ProvidesRequestData - #5sendRequest and waitForResponse now return an object ofhollodotme\FastCGI\Interfaces\ProvidesResponseData - #2GET, POST, PUT, PATCH and DELETEhollodotme\FastCGI\Constants\RequestMethod - #5HTTP/1.0 and HTTP/1.1 in hollodotme\FastCGI\Constants\ServerProtocol
hollodotme\FastCGI\Requests\GetRequesthollodotme\FastCGI\Requests\PostRequesthollodotme\FastCGI\Requests\PutRequesthollodotme\FastCGI\Requests\PatchRequesthollodotme\FastCGI\Requests\DeleteRequestClientEncoders\PacketEncoderSocketConnections\DefaultsBased
on Pierrick Charron's PHP-FastCGI-Client:
ConfiguresSocketConnectionUnixDomainSocket and NetworkSocketFastCGIClientExceptionForbiddenException, ReadFailedException, TimeoutException, WriteFailedExceptionClient now expects a ConfiguresSocketConnection instanceClient->request() to Client->sendRequest()Client->async_request() to Client->sendAsyncRequest()Client->wait_for_response() to Client->waitForResponse()ClientClient (now part of theClient->getValues()Please take notice of the backwards incompatible changes (BC breaks) documented below in the changelog of 3.0.0-alpha & 3.0.0-beta .
All notable changes to this project will be documented in this file. This project adheres
to Semantic Versioning and Keep a CHANGELOG.
Content-Transfer-Encoding: base64 header from multipart block for filesmime_content_type(), if availablenull nor a resourcedocker-compose.yml with composer archives via .gitattributes.gitattributes file to exclude non-relevant files/directories from archives/releases installed by composer - #58bin/fcgiget in composer.json as it is a potential security issue (because bin/fcgiget accepts anyAbstractRequest due to a final constructor. - #56newWithRequestContent to all request classes in order to simplify the use of the new requesterror_reporting=-1 for CI and tests in order to capture deprecation warningsPlease take notice of the backwards incompatible changes (BC breaks) documented below in the changelog
of 3.0.0-alpha & 3.0.0-beta.
The socket conection parameter was moved from the Client's constructor to
Client#sendRequest(ConfiguresSocketConnection $connection, ProvidesRequestData $request) : ProvidesResponseDataClient#sendAsyncRequest(ConfiguresSocketConnection $connection, ProvidesRequestData $request) : intin order to allow sending (equal) requests to different FastCGI servers using the same Client instance. - #45
Removed method ProvidesResponseData#getRequestId() : int and Response#getRequestId() : int respectively in order
to avoid confusion about the semantics of the term "request ID" and misusage by assuming it is a unique ID for each
request (which it is not). Also the first constructor parameter of the Response class was removed with this change.
Renamed all $requestId(s) parameters to $socketId(s) in order to reflect the correct semantics of the ID. - #39
Renamed method Client#getRequestIdsHavingResponse() : array<int>
to Client#getSocketIdsHavingResponse() : array<int> in order to reflect the correct semantics of the returned array
of IDs. - #39
Method Response#getHeaders() : array will now return a two-dimensional array with grouped values to support
multi-value headers. Previous versions returned a one-dimensional key-value array.
# Previous versions
[
'Status' => 'HTTP/2 200 OK',
'Set-Cookie' => 'tasty_cookie=strawberry',
]
# Since 3.0.0-alpha
[
'Status' => [
'HTTP/2 200 OK',
],
'Set-Cookie' => [
'yummy_cookie=choco',
'tasty_cookie=strawberry',
],
]Method Response#getHeader(string $headerKey) : array will now return an array containing all values for the given
header key to support multi-value headers. Previous versions returned the last value as a string.
echo $response->getHeader('Set-Cookie');
# Previous versions
'tasty_cookie=strawberry'
# Since 3.0.0-alpha
[
'yummy_cookie=choco',
'tasty_cookie=strawberry'
]Method Response#getRawResponse() : string is no longer available and its usage must be replaced
with Response#getOutput(). The method was deprecated since version 2.6.0.
Response#getHeaderLine(string $headerKey) : string that returns all values, separated by comma, for the givenResponse#getHeader(string $headerKey) : arrayResponse#getHeaderLine(string $headerKey) : string. - #35Response#getRawResponse() : string that was deprecated in version 2.6.0 in favourResponse#getOutput() : string. - #36stream_select returning false in case of a system call interrupt. - #41pm.max_children setting. - #40Two new methods to Response class - #27
Response#getOutput() which is identical to Response#getRawResponse() and will return the complete output fromSTDOUT stream of the response.Response#getError() which will return the complete output of the STDERR stream of the response.Second parameter $errorBuffer in tha pass through callback signature - #27
$callback = function( string $outputBuffer, string $errorBuffer ) {};This parameter will contain the contents of the STDERR stream packets.
Response#getRawResponse() in favour of consistant naming. This method will be removed in v3.0.0 - #27ProcessManagerException that was introduced in v2.5.0 - #27bin/fcgiget to accept full URL paths and print STDOUT and STDERR outputNew ProcessManagerException in case the php-fpm responds with packages of type STDERR. This refers mainly to the
error Primary script unknown resp. the response File not found..
CI builds for PHP 7.3
20000 and was updated to 200000 asphp://input on worker side when client sends content larger than 65535 bytes - #15getHost() and getPort() with getSocketAddress() inhollodotme\FastCGI\Interfaces\ConfiguresSocketConnection - #9unix:// must be omitted for the first parameterhollodotme\FastCGI\SocketConnections\UnixDomainSocketfsockopen() with stream_socket_client() for connecting to php-fpm. - #9addResponseCallbacks(callable ...$callbacks) to all request classes to enable response evaluation delegation
addFailureCallbacks(callable ...$callbacks) to all request classes to enable exception handling delegationreadResponse(int $requestId, ?int $timeoutMs = null) : ProvidesResponseData to read and retrieve a singlereadResponses(?int $imeoutMs = null, int ...$requestIds) : \Generator to read and yield multiple responsesreadReadyResponses(?int $imeoutMs = null) : \Generator to check for ready responses, read and yield themwaitForResponses(?int $timeout = null) to Client class for waiting for multiple responses and calling thegetRequestIdsHavingResponse() : array to enable reactive read of responses as they occurhasUnhandledResponses() : bool to check for outstanding responseshandleResponse(int $requestId, ?int $timeoutMs = null) to fetch a specific response and notify the respectivehandleResponses(?int $timeoutMs = null, int ...$requestIds) to fetch a specific responses and notify thehandleReadyResponses(?int $timeoutMs = null) to check for ready responses, fetch them and notify thewaitForResponse(int $requestId, ?int $timeoutMs = null) is not returning a response anymore, but will callreadResponse(int $requestId, ?int $timeoutMs = null): ProvidesResponseData if you want to get the responsesendRequest and sendAsyncRequest expect to get an object ofhollodotme\FastCGI\Interfaces\ProvidesRequestData - #5sendRequest and waitForResponse now return an object ofhollodotme\FastCGI\Interfaces\ProvidesResponseData - #2GET, POST, PUT, PATCH and DELETEhollodotme\FastCGI\Constants\RequestMethod - #5HTTP/1.0 and HTTP/1.1 in hollodotme\FastCGI\Constants\ServerProtocol
hollodotme\FastCGI\Requests\GetRequesthollodotme\FastCGI\Requests\PostRequesthollodotme\FastCGI\Requests\PutRequesthollodotme\FastCGI\Requests\PatchRequesthollodotme\FastCGI\Requests\DeleteRequestClientEncoders\PacketEncoderSocketConnections\DefaultsBased
on Pierrick Charron's PHP-FastCGI-Client:
ConfiguresSocketConnectionUnixDomainSocket and NetworkSocketFastCGIClientExceptionForbiddenException, ReadFailedException, TimeoutException, WriteFailedExceptionClient now expects a ConfiguresSocketConnection instanceClient->request() to Client->sendRequest()Client->async_request() to Client->sendAsyncRequest()Client->wait_for_response() to Client->waitForResponse()ClientClient (now part of theClient->getValues()Please take notice of the backwards incompatible changes (BC breaks) documented below in the changelog of 3.0.0-alpha & 3.0.0-beta .
All notable changes to this project will be documented in this file. This project adheres
to Semantic Versioning and Keep a CHANGELOG.
Content-Transfer-Encoding: base64 header from multipart block for filesmime_content_type(), if availablenull nor a resourcedocker-compose.yml with composer archives via .gitattributes.gitattributes file to exclude non-relevant files/directories from archives/releases installed by composer - #58bin/fcgiget in composer.json as it is a potential security issue (because bin/fcgiget accepts anyAbstractRequest due to a final constructor. - #56newWithRequestContent to all request classes in order to simplify the use of the new requesterror_reporting=-1 for CI and tests in order to capture deprecation warningsPlease take notice of the backwards incompatible changes (BC breaks) documented below in the changelog
of 3.0.0-alpha & 3.0.0-beta.
The socket conection parameter was moved from the Client's constructor to
Client#sendRequest(ConfiguresSocketConnection $connection, ProvidesRequestData $request) : ProvidesResponseDataClient#sendAsyncRequest(ConfiguresSocketConnection $connection, ProvidesRequestData $request) : intin order to allow sending (equal) requests to different FastCGI servers using the same Client instance. - #45
Removed method ProvidesResponseData#getRequestId() : int and Response#getRequestId() : int respectively in order
to avoid confusion about the semantics of the term "request ID" and misusage by assuming it is a unique ID for each
request (which it is not). Also the first constructor parameter of the Response class was removed with this change.
Renamed all $requestId(s) parameters to $socketId(s) in order to reflect the correct semantics of the ID. - #39
Renamed method Client#getRequestIdsHavingResponse() : array<int>
to Client#getSocketIdsHavingResponse() : array<int> in order to reflect the correct semantics of the returned array
of IDs. - #39
Method Response#getHeaders() : array will now return a two-dimensional array with grouped values to support
multi-value headers. Previous versions returned a one-dimensional key-value array.
# Previous versions
[
'Status' => 'HTTP/2 200 OK',
'Set-Cookie' => 'tasty_cookie=strawberry',
]
# Since 3.0.0-alpha
[
'Status' => [
'HTTP/2 200 OK',
],
'Set-Cookie' => [
'yummy_cookie=choco',
'tasty_cookie=strawberry',
],
]Method Response#getHeader(string $headerKey) : array will now return an array containing all values for the given
header key to support multi-value headers. Previous versions returned the last value as a string.
echo $response->getHeader('Set-Cookie');
# Previous versions
'tasty_cookie=strawberry'
# Since 3.0.0-alpha
[
'yummy_cookie=choco',
'tasty_cookie=strawberry'
]Method Response#getRawResponse() : string is no longer available and its usage must be replaced
with Response#getOutput(). The method was deprecated since version 2.6.0.
Response#getHeaderLine(string $headerKey) : string that returns all values, separated by comma, for the givenResponse#getHeader(string $headerKey) : arrayResponse#getHeaderLine(string $headerKey) : string. - #35Response#getRawResponse() : string that was deprecated in version 2.6.0 in favourResponse#getOutput() : string. - #36stream_select returning false in case of a system call interrupt. - #41pm.max_children setting. - #40Two new methods to Response class - #27
Response#getOutput() which is identical to Response#getRawResponse() and will return the complete output fromSTDOUT stream of the response.Response#getError() which will return the complete output of the STDERR stream of the response.Second parameter $errorBuffer in tha pass through callback signature - #27
$callback = function( string $outputBuffer, string $errorBuffer ) {};This parameter will contain the contents of the STDERR stream packets.
Response#getRawResponse() in favour of consistant naming. This method will be removed in v3.0.0 - #27ProcessManagerException that was introduced in v2.5.0 - #27bin/fcgiget to accept full URL paths and print STDOUT and STDERR outputNew ProcessManagerException in case the php-fpm responds with packages of type STDERR. This refers mainly to the
error Primary script unknown resp. the response File not found..
CI builds for PHP 7.3
20000 and was updated to 200000 asphp://input on worker side when client sends content larger than 65535 bytes - #15getHost() and getPort() with getSocketAddress() inhollodotme\FastCGI\Interfaces\ConfiguresSocketConnection - #9unix:// must be omitted for the first parameterhollodotme\FastCGI\SocketConnections\UnixDomainSocketfsockopen() with stream_socket_client() for connecting to php-fpm. - #9addResponseCallbacks(callable ...$callbacks) to all request classes to enable response evaluation delegation
addFailureCallbacks(callable ...$callbacks) to all request classes to enable exception handling delegationreadResponse(int $requestId, ?int $timeoutMs = null) : ProvidesResponseData to read and retrieve a singlereadResponses(?int $imeoutMs = null, int ...$requestIds) : \Generator to read and yield multiple responsesreadReadyResponses(?int $imeoutMs = null) : \Generator to check for ready responses, read and yield themwaitForResponses(?int $timeout = null) to Client class for waiting for multiple responses and calling thegetRequestIdsHavingResponse() : array to enable reactive read of responses as they occurhasUnhandledResponses() : bool to check for outstanding responseshandleResponse(int $requestId, ?int $timeoutMs = null) to fetch a specific response and notify the respectivehandleResponses(?int $timeoutMs = null, int ...$requestIds) to fetch a specific responses and notify thehandleReadyResponses(?int $timeoutMs = null) to check for ready responses, fetch them and notify thewaitForResponse(int $requestId, ?int $timeoutMs = null) is not returning a response anymore, but will callreadResponse(int $requestId, ?int $timeoutMs = null): ProvidesResponseData if you want to get the responsesendRequest and sendAsyncRequest expect to get an object ofhollodotme\FastCGI\Interfaces\ProvidesRequestData - #5sendRequest and waitForResponse now return an object ofhollodotme\FastCGI\Interfaces\ProvidesResponseData - #2GET, POST, PUT, PATCH and DELETEhollodotme\FastCGI\Constants\RequestMethod - #5HTTP/1.0 and HTTP/1.1 in hollodotme\FastCGI\Constants\ServerProtocol
hollodotme\FastCGI\Requests\GetRequesthollodotme\FastCGI\Requests\PostRequesthollodotme\FastCGI\Requests\PutRequesthollodotme\FastCGI\Requests\PatchRequesthollodotme\FastCGI\Requests\DeleteRequestClientEncoders\PacketEncoderSocketConnections\DefaultsBased
on Pierrick Charron's PHP-FastCGI-Client:
ConfiguresSocketConnectionUnixDomainSocket and NetworkSocketFastCGIClientExceptionForbiddenException, ReadFailedException, TimeoutException, WriteFailedExceptionClient now expects a ConfiguresSocketConnection instanceClient->request() to Client->sendRequest()Client->async_request() to Client->sendAsyncRequest()Client->wait_for_response() to Client->waitForResponse()ClientClient (now part of theClient->getValues()Please take notice of the backwards incompatible changes (BC breaks) documented below in the changelog of 3.0.0-alpha & 3.0.0-beta .
All notable changes to this project will be documented in this file. This project adheres
to Semantic Versioning and Keep a CHANGELOG.
Content-Transfer-Encoding: base64 header from multipart block for filesmime_content_type(), if availablenull nor a resourcedocker-compose.yml with composer archives via .gitattributes.gitattributes file to exclude non-relevant files/directories from archives/releases installed by composer - #58bin/fcgiget in composer.json as it is a potential security issue (because bin/fcgiget accepts any accessible fastCGI endpoint and may be exposed in some setups)AbstractRequest due to a final constructor. - #56newWithRequestContent to all request classes in order to simplify the use of the new request content type composers.error_reporting=-1 for CI and tests in order to capture deprecation warningsPlease take notice of the backwards incompatible changes (BC breaks) documented below
in the changelog of 3.0.0-alpha & 3.0.0-beta.
The socket conection parameter was moved from the Client's constructor to
Client#sendRequest(ConfiguresSocketConnection $connection, ProvidesRequestData $request) : ProvidesResponseData andClient#sendAsyncRequest(ConfiguresSocketConnection $connection, ProvidesRequestData $request) : intin order to allow sending (equal) requests to different FastCGI servers using the same Client instance. - #45
Removed method ProvidesResponseData#getRequestId() : int and Response#getRequestId() : int respectively in order
to avoid confusion about the semantics of the term "request ID" and misusage by assuming it is a unique ID for each request (which it is not).
Also the first constructor parameter of the Response class was removed with this change. - #39
Renamed all $requestId(s) parameters to $socketId(s) in order to reflect the correct semantics of the ID. - #39
Renamed method Client#getRequestIdsHavingResponse() : array<int> to Client#getSocketIdsHavingResponse() : array<int> in order to reflect
the correct semantics of the returned array of IDs. - #39
Method Response#getHeaders() : array will now return a two-dimensional array with grouped values to support
multi-value headers. Previous versions returned a one-dimensional key-value array.
# Previous versions
[
'Status' => 'HTTP/2 200 OK',
'Set-Cookie' => 'tasty_cookie=strawberry',
]
# Since 3.0.0-alpha
[
'Status' => [
'HTTP/2 200 OK',
],
'Set-Cookie' => [
'yummy_cookie=choco',
'tasty_cookie=strawberry',
],
]Method Response#getHeader(string $headerKey) : array will now return an array containing all values for the given
header key to support multi-value headers. Previous versions returned the last value as a string.
echo $response->getHeader('Set-Cookie');
# Previous versions
'tasty_cookie=strawberry'
# Since 3.0.0-alpha
[
'yummy_cookie=choco',
'tasty_cookie=strawberry'
]Method Response#getRawResponse() : string is no longer available and its usage must be replaced with Response#getOutput().
The method was deprecated since version 2.6.0.
Response#getHeaderLine(string $headerKey) : string that returns all values, separated by comma, for the given key. - #35Response#getHeader(string $headerKey) : array and Response#getHeaderLine(string $headerKey) : string. - #35Response#getRawResponse() : string that was deprecated in version 2.6.0 in favour of Response#getOutput() : string. - #36stream_select returning false in case of a system call interrupt. - #41pm.max_children setting. - #40Two new methods to Response class - #27
Response#getOutput() which is identical to Response#getRawResponse() and will return the complete output fromSTDOUT stream of the response.Response#getError() which will return the complete output of the STDERR stream of the response.Second parameter $errorBuffer in tha pass through callback signature - #27
$callback = function( string $outputBuffer, string $errorBuffer ) {};This parameter will contain the contents of the STDERR stream packets.
Response#getRawResponse() in favour of consistant naming. This method will be removed in v3.0.0 - #27ProcessManagerException that was introduced in v2.5.0 - #27bin/fcgiget to accept full URL paths and print STDOUT and STDERR outputNew ProcessManagerException in case the php-fpm responds with packages of type STDERR.
This refers mainly to the error Primary script unknown resp. the response File not found..
CI builds for PHP 7.3
20000 and was updated to 200000 asphp://input on worker side when client sends content larger than 65535 bytes - #15getHost() and getPort() with getSocketAddress() in interface hollodotme\FastCGI\Interfaces\ConfiguresSocketConnection - #9unix:// must be omitted for the first parameter of hollodotme\FastCGI\SocketConnections\UnixDomainSocketfsockopen() with stream_socket_client() for connecting to php-fpm. - #9addResponseCallbacks(callable ...$callbacks) to all request classes to enable response evaluation delegation - #6addFailureCallbacks(callable ...$callbacks) to all request classes to enable exception handling delegationreadResponse(int $requestId, ?int $timeoutMs = null) : ProvidesResponseData to read and retrieve a single responsereadResponses(?int $imeoutMs = null, int ...$requestIds) : \Generator to read and yield multiple responsesreadReadyResponses(?int $imeoutMs = null) : \Generator to check for ready responses, read and yield themwaitForResponses(?int $timeout = null) to Client class for waiting for multiple responses and calling the respective response callbacks - #5getRequestIdsHavingResponse() : array to enable reactive read of responses as they occurhasUnhandledResponses() : bool to check for outstanding responseshandleResponse(int $requestId, ?int $timeoutMs = null) to fetch a specific response and notify the respective response callbackhandleResponses(?int $timeoutMs = null, int ...$requestIds) to fetch a specific responses and notify the respective response callbackshandleReadyResponses(?int $timeoutMs = null) to check for ready responses, fetch them and notify the respective response callbackswaitForResponse(int $requestId, ?int $timeoutMs = null) is not returning a response anymore, but will call the response callbackreadResponse(int $requestId, ?int $timeoutMs = null): ProvidesResponseData if you want to get the response directly.sendRequest and sendAsyncRequest expect to get an object of interface hollodotme\FastCGI\Interfaces\ProvidesRequestData - #5sendRequest and waitForResponse now return an object of interface hollodotme\FastCGI\Interfaces\ProvidesResponseData - #2GET, POST, PUT, PATCH and DELETE in hollodotme\FastCGI\Constants\RequestMethod - #5HTTP/1.0 and HTTP/1.1 in hollodotme\FastCGI\Constants\ServerProtocol - #5hollodotme\FastCGI\Requests\GetRequesthollodotme\FastCGI\Requests\PostRequesthollodotme\FastCGI\Requests\PutRequesthollodotme\FastCGI\Requests\PatchRequesthollodotme\FastCGI\Requests\DeleteRequestClientEncoders\PacketEncoderSocketConnections\DefaultsBased on Pierrick Charron's PHP-FastCGI-Client:
ConfiguresSocketConnectionUnixDomainSocket and NetworkSocketFastCGIClientExceptionForbiddenException, ReadFailedException, TimeoutException, WriteFailedExceptionClient now expects a ConfiguresSocketConnection instanceClient->request() to Client->sendRequest()Client->async_request() to Client->sendAsyncRequest()Client->wait_for_response() to Client->waitForResponse()ClientClient (now part of the socket connection)Client->getValues()Please take notice of the backwards incompatible changes (BC breaks) documented below in the changelog of 3.0.0-alpha & 3.0.0-beta .
All notable changes to this project will be documented in this file. This project adheres
to Semantic Versioning and Keep a CHANGELOG.
null nor a resourcedocker-compose.yml with composer archives via .gitattributes.gitattributes file to exclude non-relevant files/directories from archives/releases installed by composer - #58bin/fcgiget in composer.json as it is a potential security issue (because bin/fcgiget accepts any accessible fastCGI endpoint and may be exposed in some setups)AbstractRequest due to a final constructor. - #56newWithRequestContent to all request classes in order to simplify the use of the new request content type composers.error_reporting=-1 for CI and tests in order to capture deprecation warningsPlease take notice of the backwards incompatible changes (BC breaks) documented below
in the changelog of 3.0.0-alpha & 3.0.0-beta.
The socket conection parameter was moved from the Client's constructor to
Client#sendRequest(ConfiguresSocketConnection $connection, ProvidesRequestData $request) : ProvidesResponseData andClient#sendAsyncRequest(ConfiguresSocketConnection $connection, ProvidesRequestData $request) : intin order to allow sending (equal) requests to different FastCGI servers using the same Client instance. - #45
Removed method ProvidesResponseData#getRequestId() : int and Response#getRequestId() : int respectively in order
to avoid confusion about the semantics of the term "request ID" and misusage by assuming it is a unique ID for each request (which it is not).
Also the first constructor parameter of the Response class was removed with this change. - #39
Renamed all $requestId(s) parameters to $socketId(s) in order to reflect the correct semantics of the ID. - #39
Renamed method Client#getRequestIdsHavingResponse() : array<int> to Client#getSocketIdsHavingResponse() : array<int> in order to reflect
the correct semantics of the returned array of IDs. - #39
Method Response#getHeaders() : array will now return a two-dimensional array with grouped values to support
multi-value headers. Previous versions returned a one-dimensional key-value array.
# Previous versions
[
'Status' => 'HTTP/2 200 OK',
'Set-Cookie' => 'tasty_cookie=strawberry',
]
# Since 3.0.0-alpha
[
'Status' => [
'HTTP/2 200 OK',
],
'Set-Cookie' => [
'yummy_cookie=choco',
'tasty_cookie=strawberry',
],
]Method Response#getHeader(string $headerKey) : array will now return an array containing all values for the given
header key to support multi-value headers. Previous versions returned the last value as a string.
echo $response->getHeader('Set-Cookie');
# Previous versions
'tasty_cookie=strawberry'
# Since 3.0.0-alpha
[
'yummy_cookie=choco',
'tasty_cookie=strawberry'
]Method Response#getRawResponse() : string is no longer available and its usage must be replaced with Response#getOutput().
The method was deprecated since version 2.6.0.
Response#getHeaderLine(string $headerKey) : string that returns all values, separated by comma, for the given key. - #35Response#getHeader(string $headerKey) : array and Response#getHeaderLine(string $headerKey) : string. - #35Response#getRawResponse() : string that was deprecated in version 2.6.0 in favour of Response#getOutput() : string. - #36stream_select returning false in case of a system call interrupt. - #41pm.max_children setting. - #40Two new methods to Response class - #27
Response#getOutput() which is identical to Response#getRawResponse() and will return the complete output fromSTDOUT stream of the response.Response#getError() which will return the complete output of the STDERR stream of the response.Second parameter $errorBuffer in tha pass through callback signature - #27
$callback = function( string $outputBuffer, string $errorBuffer ) {};This parameter will contain the contents of the STDERR stream packets.
Response#getRawResponse() in favour of consistant naming. This method will be removed in v3.0.0 - #27ProcessManagerException that was introduced in v2.5.0 - #27bin/fcgiget to accept full URL paths and print STDOUT and STDERR outputNew ProcessManagerException in case the php-fpm responds with packages of type STDERR.
This refers mainly to the error Primary script unknown resp. the response File not found..
CI builds for PHP 7.3
20000 and was updated to 200000 asphp://input on worker side when client sends content larger than 65535 bytes - #15getHost() and getPort() with getSocketAddress() in interface hollodotme\FastCGI\Interfaces\ConfiguresSocketConnection - #9unix:// must be omitted for the first parameter of hollodotme\FastCGI\SocketConnections\UnixDomainSocketfsockopen() with stream_socket_client() for connecting to php-fpm. - #9addResponseCallbacks(callable ...$callbacks) to all request classes to enable response evaluation delegation - #6addFailureCallbacks(callable ...$callbacks) to all request classes to enable exception handling delegationreadResponse(int $requestId, ?int $timeoutMs = null) : ProvidesResponseData to read and retrieve a single responsereadResponses(?int $imeoutMs = null, int ...$requestIds) : \Generator to read and yield multiple responsesreadReadyResponses(?int $imeoutMs = null) : \Generator to check for ready responses, read and yield themwaitForResponses(?int $timeout = null) to Client class for waiting for multiple responses and calling the respective response callbacks - #5getRequestIdsHavingResponse() : array to enable reactive read of responses as they occurhasUnhandledResponses() : bool to check for outstanding responseshandleResponse(int $requestId, ?int $timeoutMs = null) to fetch a specific response and notify the respective response callbackhandleResponses(?int $timeoutMs = null, int ...$requestIds) to fetch a specific responses and notify the respective response callbackshandleReadyResponses(?int $timeoutMs = null) to check for ready responses, fetch them and notify the respective response callbackswaitForResponse(int $requestId, ?int $timeoutMs = null) is not returning a response anymore, but will call the response callbackreadResponse(int $requestId, ?int $timeoutMs = null): ProvidesResponseData if you want to get the response directly.sendRequest and sendAsyncRequest expect to get an object of interface hollodotme\FastCGI\Interfaces\ProvidesRequestData - #5sendRequest and waitForResponse now return an object of interface hollodotme\FastCGI\Interfaces\ProvidesResponseData - #2GET, POST, PUT, PATCH and DELETE in hollodotme\FastCGI\Constants\RequestMethod - #5HTTP/1.0 and HTTP/1.1 in hollodotme\FastCGI\Constants\ServerProtocol - #5hollodotme\FastCGI\Requests\GetRequesthollodotme\FastCGI\Requests\PostRequesthollodotme\FastCGI\Requests\PutRequesthollodotme\FastCGI\Requests\PatchRequesthollodotme\FastCGI\Requests\DeleteRequestClientEncoders\PacketEncoderSocketConnections\DefaultsBased on Pierrick Charron's PHP-FastCGI-Client:
ConfiguresSocketConnectionUnixDomainSocket and NetworkSocketFastCGIClientExceptionForbiddenException, ReadFailedException, TimeoutException, WriteFailedExceptionClient now expects a ConfiguresSocketConnection instanceClient->request() to Client->sendRequest()Client->async_request() to Client->sendAsyncRequest()Client->wait_for_response() to Client->waitForResponse()ClientClient (now part of the socket connection)Client->getValues()Please take notice of the backwards incompatible changes (BC breaks) documented below in the changelog of 3.0.0-alpha & 3.0.0-beta .
All notable changes to this project will be documented in this file.
This project adheres to Semantic Versioning and Keep a CHANGELOG.
docker-compose.yml with composer archives via .gitattributes.gitattributes file to exclude non-relevant files/directories from archives/releases installed by composer - #58bin/fcgiget in composer.json as it is a potential security issue (because bin/fcgiget accepts any accessible fastCGI endpoint and may be exposed in some setups)AbstractRequest due to a final constructor. - #56newWithRequestContent to all request classes in order to simplify the use of the new request content type composers.error_reporting=-1 for CI and tests in order to capture deprecation warningsPlease take notice of the backwards incompatible changes (BC breaks) documented below
in the changelog of 3.0.0-alpha & 3.0.0-beta.
The socket conection parameter was moved from the Client's constructor to
Client#sendRequest(ConfiguresSocketConnection $connection, ProvidesRequestData $request) : ProvidesResponseData andClient#sendAsyncRequest(ConfiguresSocketConnection $connection, ProvidesRequestData $request) : intin order to allow sending (equal) requests to different FastCGI servers using the same Client instance. - #45
Removed method ProvidesResponseData#getRequestId() : int and Response#getRequestId() : int resepctivly in order
to avoid confusion about the semantics of the term "request ID" and misusage by assuming it is a unique ID for each request (which it is not).
Also the first constructor parameter of the Response class was removed wiht this change. - #39
Renamed all $requestId(s) parameters to $socketId(s) in order to reflect the correct semantics of the ID. - #39
Renamed method Client#getRequestIdsHavingResponse() : array<int> to Client#getSocketIdsHavingResponse() : array<int> in order to reflect
the correct semantics of the returned array of IDs. - #39
Method Response#getHeaders() : array will now return a two-dimensional array with grouped values to support
multi-value headers. Previous versions returned a one-dimensional key-value array.
# Previous versions
[
'Status' => 'HTTP/2 200 OK',
'Set-Cookie' => 'tasty_cookie=strawberry',
]
# Since 3.0.0-alpha
[
'Status' => [
'HTTP/2 200 OK',
],
'Set-Cookie' => [
'yummy_cookie=choco',
'tasty_cookie=strawberry',
],
]Method Response#getHeader(string $headerKey) : array will now return an array containing all values for the given
header key to support multi-value headers. Previous versions returned the last value as a string.
echo $response->getHeader('Set-Cookie');
# Previous versions
'tasty_cookie=strawberry'
# Since 3.0.0-alpha
[
'yummy_cookie=choco',
'tasty_cookie=strawberry'
]Method Response#getRawResponse() : string is no longer available and its usage must be replaced with Response#getOutput().
The method was deprecated since version 2.6.0.
Response#getHeaderLine(string $headerKey) : string that returns all values, separated by comma, for the given key. - #35Response#getHeader(string $headerKey) : array and Response#getHeaderLine(string $headerKey) : string. - #35Response#getRawResponse() : string that was deprecated in version 2.6.0 in favour of Response#getOutput() : string. - #36stream_select returning false in case of a system call interrupt. - #41pm.max_children setting. - #40Two new methods to Response class - #27
Response#getOutput() which is identical to Response#getRawResponse() and will return the complete output fromSTDOUT stream of the response.Response#getError() which will return the complete output of the STDERR stream of the response.Second parameter $errorBuffer in tha pass through callback signature - #27
$callback = function( string $outputBuffer, string $errorBuffer ) {};This parameter will contain the contents of the STDERR stream packets.
Response#getRawResponse() in favour of consistant naming. This method will be removed in v3.0.0 - #27ProcessManagerException that was introduced in v2.5.0 - #27bin/fcgiget to accept full URL paths and print STDOUT and STDERR outputNew ProcessManagerException in case the php-fpm responds with packages of type STDERR.
This refers mainly to the error Primary script unknown resp. the response File not found..
CI builds for PHP 7.3
20000 and was updated to 200000 asphp://input on worker side when client sends content larger than 65535 bytes - #15getHost() and getPort() with getSocketAddress() in interface hollodotme\FastCGI\Interfaces\ConfiguresSocketConnection - #9unix:// must be omitted for the first parameter of hollodotme\FastCGI\SocketConnections\UnixDomainSocketfsockopen() with stream_socket_client() for connecting to php-fpm. - #9addResponseCallbacks(callable ...$callbacks) to all request classes to enable response evaluation delegation - #6addFailureCallbacks(callable ...$callbacks) to all request classes to enable exception handling delegationreadResponse(int $requestId, ?int $timeoutMs = null) : ProvidesResponseData to read and retrieve a single responsereadResponses(?int $imeoutMs = null, int ...$requestIds) : \Generator to read and yield multiple responsesreadReadyResponses(?int $imeoutMs = null) : \Generator to check for ready responses, read and yield themwaitForResponses(?int $timeout = null) to Client class for waiting for multiple responses and calling the respective response callbacks - #5getRequestIdsHavingResponse() : array to enable reactive read of responses as they occurhasUnhandledResponses() : bool to check for outstanding responseshandleResponse(int $requestId, ?int $timeoutMs = null) to fetch a specific response and notify the respective response callbackhandleResponses(?int $timeoutMs = null, int ...$requestIds) to fetch a specific responses and notify the respective response callbackshandleReadyResponses(?int $timeoutMs = null) to check for ready responses, fetch them and notify the respective response callbackswaitForResponse(int $requestId, ?int $timeoutMs = null) is not returning a response anymore, but will call the response callbackreadResponse(int $requestId, ?int $timeoutMs = null): ProvidesResponseData if you want to get the response directly.sendRequest and sendAsyncRequest expect to get an object of interface hollodotme\FastCGI\Interfaces\ProvidesRequestData - #5sendRequest and waitForResponse now return an object of interface hollodotme\FastCGI\Interfaces\ProvidesResponseData - #2GET, POST, PUT, PATCH and DELETE in hollodotme\FastCGI\Constants\RequestMethod - #5HTTP/1.0 and HTTP/1.1 in hollodotme\FastCGI\Constants\ServerProtocol - #5hollodotme\FastCGI\Requests\GetRequesthollodotme\FastCGI\Requests\PostRequesthollodotme\FastCGI\Requests\PutRequesthollodotme\FastCGI\Requests\PatchRequesthollodotme\FastCGI\Requests\DeleteRequestClientEncoders\PacketEncoderSocketConnections\DefaultsBased on Pierrick Charron's PHP-FastCGI-Client:
ConfiguresSocketConnectionUnixDomainSocket and NetworkSocketFastCGIClientExceptionForbiddenException, ReadFailedException, TimeoutException, WriteFailedExceptionClient now expects a ConfiguresSocketConnection instanceClient->request() to Client->sendRequest()Client->async_request() to Client->sendAsyncRequest()Client->wait_for_response() to Client->waitForResponse()ClientClient (now part of the socket connection)Client->getValues()Please take notice of the backwards incompatible changes (BC breaks) documented below in the changelog of 3.0.0-alpha & 3.0.0-beta .
All notable changes to this project will be documented in this file.
This project adheres to Semantic Versioning and Keep a CHANGELOG.
.gitattributes file to exclude non-relevant files/directories from archives/releases installed by composer - #58bin/fcgiget in composer.json as it is a potential security issue (because bin/fcgiget accepts any accessible fastCGI endpoint and may be exposed in some setups)AbstractRequest due to a final constructor. - #56newWithRequestContent to all request classes in order to simplify the use of the new request content type composers.error_reporting=-1 for CI and tests in order to capture deprecation warningsPlease take notice of the backwards incompatible changes (BC breaks) documented below
in the changelog of 3.0.0-alpha & 3.0.0-beta.
The socket conection parameter was moved from the Client's constructor to
Client#sendRequest(ConfiguresSocketConnection $connection, ProvidesRequestData $request) : ProvidesResponseData andClient#sendAsyncRequest(ConfiguresSocketConnection $connection, ProvidesRequestData $request) : intin order to allow sending (equal) requests to different FastCGI servers using the same Client instance. - #45
Removed method ProvidesResponseData#getRequestId() : int and Response#getRequestId() : int resepctivly in order
to avoid confusion about the semantics of the term "request ID" and misusage by assuming it is a unique ID for each request (which it is not).
Also the first constructor parameter of the Response class was removed wiht this change. - #39
Renamed all $requestId(s) parameters to $socketId(s) in order to reflect the correct semantics of the ID. - #39
Renamed method Client#getRequestIdsHavingResponse() : array<int> to Client#getSocketIdsHavingResponse() : array<int> in order to reflect
the correct semantics of the returned array of IDs. - #39
Method Response#getHeaders() : array will now return a two-dimensional array with grouped values to support
multi-value headers. Previous versions returned a one-dimensional key-value array.
# Previous versions
[
'Status' => 'HTTP/2 200 OK',
'Set-Cookie' => 'tasty_cookie=strawberry',
]
# Since 3.0.0-alpha
[
'Status' => [
'HTTP/2 200 OK',
],
'Set-Cookie' => [
'yummy_cookie=choco',
'tasty_cookie=strawberry',
],
]Method Response#getHeader(string $headerKey) : array will now return an array containing all values for the given
header key to support multi-value headers. Previous versions returned the last value as a string.
echo $response->getHeader('Set-Cookie');
# Previous versions
'tasty_cookie=strawberry'
# Since 3.0.0-alpha
[
'yummy_cookie=choco',
'tasty_cookie=strawberry'
]Method Response#getRawResponse() : string is no longer available and its usage must be replaced with Response#getOutput().
The method was deprecated since version 2.6.0.
Response#getHeaderLine(string $headerKey) : string that returns all values, separated by comma, for the given key. - #35Response#getHeader(string $headerKey) : array and Response#getHeaderLine(string $headerKey) : string. - #35Response#getRawResponse() : string that was deprecated in version 2.6.0 in favour of Response#getOutput() : string. - #36stream_select returning false in case of a system call interrupt. - #41pm.max_children setting. - #40Two new methods to Response class - #27
Response#getOutput() which is identical to Response#getRawResponse() and will return the complete output fromSTDOUT stream of the response.Response#getError() which will return the complete output of the STDERR stream of the response.Second parameter $errorBuffer in tha pass through callback signature - #27
$callback = function( string $outputBuffer, string $errorBuffer ) {};This parameter will contain the contents of the STDERR stream packets.
Response#getRawResponse() in favour of consistant naming. This method will be removed in v3.0.0 - #27ProcessManagerException that was introduced in v2.5.0 - #27bin/fcgiget to accept full URL paths and print STDOUT and STDERR outputNew ProcessManagerException in case the php-fpm responds with packages of type STDERR.
This refers mainly to the error Primary script unknown resp. the response File not found..
CI builds for PHP 7.3
20000 and was updated to 200000 asphp://input on worker side when client sends content larger than 65535 bytes - #15getHost() and getPort() with getSocketAddress() in interface hollodotme\FastCGI\Interfaces\ConfiguresSocketConnection - #9unix:// must be omitted for the first parameter of hollodotme\FastCGI\SocketConnections\UnixDomainSocketfsockopen() with stream_socket_client() for connecting to php-fpm. - #9addResponseCallbacks(callable ...$callbacks) to all request classes to enable response evaluation delegation - #6addFailureCallbacks(callable ...$callbacks) to all request classes to enable exception handling delegationreadResponse(int $requestId, ?int $timeoutMs = null) : ProvidesResponseData to read and retrieve a single responsereadResponses(?int $imeoutMs = null, int ...$requestIds) : \Generator to read and yield multiple responsesreadReadyResponses(?int $imeoutMs = null) : \Generator to check for ready responses, read and yield themwaitForResponses(?int $timeout = null) to Client class for waiting for multiple responses and calling the respective response callbacks - #5getRequestIdsHavingResponse() : array to enable reactive read of responses as they occurhasUnhandledResponses() : bool to check for outstanding responseshandleResponse(int $requestId, ?int $timeoutMs = null) to fetch a specific response and notify the respective response callbackhandleResponses(?int $timeoutMs = null, int ...$requestIds) to fetch a specific responses and notify the respective response callbackshandleReadyResponses(?int $timeoutMs = null) to check for ready responses, fetch them and notify the respective response callbackswaitForResponse(int $requestId, ?int $timeoutMs = null) is not returning a response anymore, but will call the response callbackreadResponse(int $requestId, ?int $timeoutMs = null): ProvidesResponseData if you want to get the response directly.sendRequest and sendAsyncRequest expect to get an object of interface hollodotme\FastCGI\Interfaces\ProvidesRequestData - #5sendRequest and waitForResponse now return an object of interface hollodotme\FastCGI\Interfaces\ProvidesResponseData - #2GET, POST, PUT, PATCH and DELETE in hollodotme\FastCGI\Constants\RequestMethod - #5HTTP/1.0 and HTTP/1.1 in hollodotme\FastCGI\Constants\ServerProtocol - #5hollodotme\FastCGI\Requests\GetRequesthollodotme\FastCGI\Requests\PostRequesthollodotme\FastCGI\Requests\PutRequesthollodotme\FastCGI\Requests\PatchRequesthollodotme\FastCGI\Requests\DeleteRequestClientEncoders\PacketEncoderSocketConnections\DefaultsBased on Pierrick Charron's PHP-FastCGI-Client:
ConfiguresSocketConnectionUnixDomainSocket and NetworkSocketFastCGIClientExceptionForbiddenException, ReadFailedException, TimeoutException, WriteFailedExceptionClient now expects a ConfiguresSocketConnection instanceClient->request() to Client->sendRequest()Client->async_request() to Client->sendAsyncRequest()Client->wait_for_response() to Client->waitForResponse()ClientClient (now part of the socket connection)Client->getValues()Please take notice of the backwards incompatible changes (BC breaks) documented below in the changelog of 3.0.0-alpha & 3.0.0-beta .
All notable changes to this project will be documented in this file.
This project adheres to Semantic Versioning and Keep a CHANGELOG.
AbstractRequest due to a final constructor. - #56newWithRequestContent to all request classes in order to simplify the use of the new request content type composers.error_reporting=-1 for CI and tests in order to capture deprecation warningsPlease take notice of the backwards incompatible changes (BC breaks) documented below
in the changelog of 3.0.0-alpha & 3.0.0-beta.
The socket conection parameter was moved from the Client's constructor to
Client#sendRequest(ConfiguresSocketConnection $connection, ProvidesRequestData $request) : ProvidesResponseData andClient#sendAsyncRequest(ConfiguresSocketConnection $connection, ProvidesRequestData $request) : intin order to allow sending (equal) requests to different FastCGI servers using the same Client instance. - #45
Removed method ProvidesResponseData#getRequestId() : int and Response#getRequestId() : int resepctivly in order
to avoid confusion about the semantics of the term "request ID" and misusage by assuming it is a unique ID for each request (which it is not).
Also the first constructor parameter of the Response class was removed wiht this change. - #39
Renamed all $requestId(s) parameters to $socketId(s) in order to reflect the correct semantics of the ID. - #39
Renamed method Client#getRequestIdsHavingResponse() : array<int> to Client#getSocketIdsHavingResponse() : array<int> in order to reflect
the correct semantics of the returned array of IDs. - #39
Method Response#getHeaders() : array will now return a two-dimensional array with grouped values to support
multi-value headers. Previous versions returned a one-dimensional key-value array.
# Previous versions
[
'Status' => 'HTTP/2 200 OK',
'Set-Cookie' => 'tasty_cookie=strawberry',
]
# Since 3.0.0-alpha
[
'Status' => [
'HTTP/2 200 OK',
],
'Set-Cookie' => [
'yummy_cookie=choco',
'tasty_cookie=strawberry',
],
]Method Response#getHeader(string $headerKey) : array will now return an array containing all values for the given
header key to support multi-value headers. Previous versions returned the last value as a string.
echo $response->getHeader('Set-Cookie');
# Previous versions
'tasty_cookie=strawberry'
# Since 3.0.0-alpha
[
'yummy_cookie=choco',
'tasty_cookie=strawberry'
]Method Response#getRawResponse() : string is no longer available and its usage must be replaced with Response#getOutput().
The method was deprecated since version 2.6.0.
Response#getHeaderLine(string $headerKey) : string that returns all values, separated by comma, for the given key. - #35Response#getHeader(string $headerKey) : array and Response#getHeaderLine(string $headerKey) : string. - #35Response#getRawResponse() : string that was deprecated in version 2.6.0 in favour of Response#getOutput() : string. - #36stream_select returning false in case of a system call interrupt. - #41pm.max_children setting. - #40Two new methods to Response class - #27
Response#getOutput() which is identical to Response#getRawResponse() and will return the complete output fromSTDOUT stream of the response.Response#getError() which will return the complete output of the STDERR stream of the response.Second parameter $errorBuffer in tha pass through callback signature - #27
$callback = function( string $outputBuffer, string $errorBuffer ) {};This parameter will contain the contents of the STDERR stream packets.
Response#getRawResponse() in favour of consistant naming. This method will be removed in v3.0.0 - #27ProcessManagerException that was introduced in v2.5.0 - #27bin/fcgiget to accept full URL paths and print STDOUT and STDERR outputNew ProcessManagerException in case the php-fpm responds with packages of type STDERR.
This refers mainly to the error Primary script unknown resp. the response File not found..
CI builds for PHP 7.3
20000 and was updated to 200000 asphp://input on worker side when client sends content larger than 65535 bytes - #15getHost() and getPort() with getSocketAddress() in interface hollodotme\FastCGI\Interfaces\ConfiguresSocketConnection - #9unix:// must be omitted for the first parameter of hollodotme\FastCGI\SocketConnections\UnixDomainSocketfsockopen() with stream_socket_client() for connecting to php-fpm. - #9addResponseCallbacks(callable ...$callbacks) to all request classes to enable response evaluation delegation - #6addFailureCallbacks(callable ...$callbacks) to all request classes to enable exception handling delegationreadResponse(int $requestId, ?int $timeoutMs = null) : ProvidesResponseData to read and retrieve a single responsereadResponses(?int $imeoutMs = null, int ...$requestIds) : \Generator to read and yield multiple responsesreadReadyResponses(?int $imeoutMs = null) : \Generator to check for ready responses, read and yield themwaitForResponses(?int $timeout = null) to Client class for waiting for multiple responses and calling the respective response callbacks - #5getRequestIdsHavingResponse() : array to enable reactive read of responses as they occurhasUnhandledResponses() : bool to check for outstanding responseshandleResponse(int $requestId, ?int $timeoutMs = null) to fetch a specific response and notify the respective response callbackhandleResponses(?int $timeoutMs = null, int ...$requestIds) to fetch a specific responses and notify the respective response callbackshandleReadyResponses(?int $timeoutMs = null) to check for ready responses, fetch them and notify the respective response callbackswaitForResponse(int $requestId, ?int $timeoutMs = null) is not returning a response anymore, but will call the response callbackreadResponse(int $requestId, ?int $timeoutMs = null): ProvidesResponseData if you want to get the response directly.sendRequest and sendAsyncRequest expect to get an object of interface hollodotme\FastCGI\Interfaces\ProvidesRequestData - #5sendRequest and waitForResponse now return an object of interface hollodotme\FastCGI\Interfaces\ProvidesResponseData - #2GET, POST, PUT, PATCH and DELETE in hollodotme\FastCGI\Constants\RequestMethod - #5HTTP/1.0 and HTTP/1.1 in hollodotme\FastCGI\Constants\ServerProtocol - #5hollodotme\FastCGI\Requests\GetRequesthollodotme\FastCGI\Requests\PostRequesthollodotme\FastCGI\Requests\PutRequesthollodotme\FastCGI\Requests\PatchRequesthollodotme\FastCGI\Requests\DeleteRequestClientEncoders\PacketEncoderSocketConnections\DefaultsBased on Pierrick Charron's PHP-FastCGI-Client:
ConfiguresSocketConnectionUnixDomainSocket and NetworkSocketFastCGIClientExceptionForbiddenException, ReadFailedException, TimeoutException, WriteFailedExceptionClient now expects a ConfiguresSocketConnection instanceClient->request() to Client->sendRequest()Client->async_request() to Client->sendAsyncRequest()Client->wait_for_response() to Client->waitForResponse()ClientClient (now part of the socket connection)Client->getValues()Please take notice of the backwards incompatible changes (BC breaks) documented below in the changelog of 3.0.0-alpha & 3.0.0-beta .
All notable changes to this project will be documented in this file.
This project adheres to Semantic Versioning and Keep a CHANGELOG.
newWithRequestContent to all request classes in order to simplify the use of the new request content type composers.error_reporting=-1 for CI and tests in order to capture deprecation warningsPlease take notice of the backwards incompatible changes (BC breaks) documented below
in the changelog of 3.0.0-alpha & 3.0.0-beta.
The socket conection parameter was moved from the Client's constructor to
Client#sendRequest(ConfiguresSocketConnection $connection, ProvidesRequestData $request) : ProvidesResponseData andClient#sendAsyncRequest(ConfiguresSocketConnection $connection, ProvidesRequestData $request) : intin order to allow sending (equal) requests to different FastCGI servers using the same Client instance. - #45
Removed method ProvidesResponseData#getRequestId() : int and Response#getRequestId() : int resepctivly in order
to avoid confusion about the semantics of the term "request ID" and misusage by assuming it is a unique ID for each request (which it is not).
Also the first constructor parameter of the Response class was removed wiht this change. - #39
Renamed all $requestId(s) parameters to $socketId(s) in order to reflect the correct semantics of the ID. - #39
Renamed method Client#getRequestIdsHavingResponse() : array<int> to Client#getSocketIdsHavingResponse() : array<int> in order to reflect
the correct semantics of the returned array of IDs. - #39
Method Response#getHeaders() : array will now return a two-dimensional array with grouped values to support
multi-value headers. Previous versions returned a one-dimensional key-value array.
# Previous versions
[
'Status' => 'HTTP/2 200 OK',
'Set-Cookie' => 'tasty_cookie=strawberry',
]
# Since 3.0.0-alpha
[
'Status' => [
'HTTP/2 200 OK',
],
'Set-Cookie' => [
'yummy_cookie=choco',
'tasty_cookie=strawberry',
],
]Method Response#getHeader(string $headerKey) : array will now return an array containing all values for the given
header key to support multi-value headers. Previous versions returned the last value as a string.
echo $response->getHeader('Set-Cookie');
# Previous versions
'tasty_cookie=strawberry'
# Since 3.0.0-alpha
[
'yummy_cookie=choco',
'tasty_cookie=strawberry'
]Method Response#getRawResponse() : string is no longer available and its usage must be replaced with Response#getOutput().
The method was deprecated since version 2.6.0.
Response#getHeaderLine(string $headerKey) : string that returns all values, separated by comma, for the given key. - #35Response#getHeader(string $headerKey) : array and Response#getHeaderLine(string $headerKey) : string. - #35Response#getRawResponse() : string that was deprecated in version 2.6.0 in favour of Response#getOutput() : string. - #36stream_select returning false in case of a system call interrupt. - #41pm.max_children setting. - #40Two new methods to Response class - #27
Response#getOutput() which is identical to Response#getRawResponse() and will return the complete output fromSTDOUT stream of the response.Response#getError() which will return the complete output of the STDERR stream of the response.Second parameter $errorBuffer in tha pass through callback signature - #27
$callback = function( string $outputBuffer, string $errorBuffer ) {};This parameter will contain the contents of the STDERR stream packets.
Response#getRawResponse() in favour of consistant naming. This method will be removed in v3.0.0 - #27ProcessManagerException that was introduced in v2.5.0 - #27bin/fcgiget to accept full URL paths and print STDOUT and STDERR outputNew ProcessManagerException in case the php-fpm responds with packages of type STDERR.
This refers mainly to the error Primary script unknown resp. the response File not found..
CI builds for PHP 7.3
20000 and was updated to 200000 asphp://input on worker side when client sends content larger than 65535 bytes - #15getHost() and getPort() with getSocketAddress() in interface hollodotme\FastCGI\Interfaces\ConfiguresSocketConnection - #9unix:// must be omitted for the first parameter of hollodotme\FastCGI\SocketConnections\UnixDomainSocketfsockopen() with stream_socket_client() for connecting to php-fpm. - #9addResponseCallbacks(callable ...$callbacks) to all request classes to enable response evaluation delegation - #6addFailureCallbacks(callable ...$callbacks) to all request classes to enable exception handling delegationreadResponse(int $requestId, ?int $timeoutMs = null) : ProvidesResponseData to read and retrieve a single responsereadResponses(?int $imeoutMs = null, int ...$requestIds) : \Generator to read and yield multiple responsesreadReadyResponses(?int $imeoutMs = null) : \Generator to check for ready responses, read and yield themwaitForResponses(?int $timeout = null) to Client class for waiting for multiple responses and calling the respective response callbacks - #5getRequestIdsHavingResponse() : array to enable reactive read of responses as they occurhasUnhandledResponses() : bool to check for outstanding responseshandleResponse(int $requestId, ?int $timeoutMs = null) to fetch a specific response and notify the respective response callbackhandleResponses(?int $timeoutMs = null, int ...$requestIds) to fetch a specific responses and notify the respective response callbackshandleReadyResponses(?int $timeoutMs = null) to check for ready responses, fetch them and notify the respective response callbackswaitForResponse(int $requestId, ?int $timeoutMs = null) is not returning a response anymore, but will call the response callbackreadResponse(int $requestId, ?int $timeoutMs = null): ProvidesResponseData if you want to get the response directly.sendRequest and sendAsyncRequest expect to get an object of interface hollodotme\FastCGI\Interfaces\ProvidesRequestData - #5sendRequest and waitForResponse now return an object of interface hollodotme\FastCGI\Interfaces\ProvidesResponseData - #2GET, POST, PUT, PATCH and DELETE in hollodotme\FastCGI\Constants\RequestMethod - #5HTTP/1.0 and HTTP/1.1 in hollodotme\FastCGI\Constants\ServerProtocol - #5hollodotme\FastCGI\Requests\GetRequesthollodotme\FastCGI\Requests\PostRequesthollodotme\FastCGI\Requests\PutRequesthollodotme\FastCGI\Requests\PatchRequesthollodotme\FastCGI\Requests\DeleteRequestClientEncoders\PacketEncoderSocketConnections\DefaultsBased on Pierrick Charron's PHP-FastCGI-Client:
ConfiguresSocketConnectionUnixDomainSocket and NetworkSocketFastCGIClientExceptionForbiddenException, ReadFailedException, TimeoutException, WriteFailedExceptionClient now expects a ConfiguresSocketConnection instanceClient->request() to Client->sendRequest()Client->async_request() to Client->sendAsyncRequest()Client->wait_for_response() to Client->waitForResponse()ClientClient (now part of the socket connection)Client->getValues()See CHANHGELOG
See CHANHGELOG
error_reporting=-1 for CI and tests in order to capture deprecation warningsSee CHANGELOG .
See CHANGELOG.
Please take notice of the backwards incompatible changes (BC breaks) documented below in the changelog of 3.0.0-alpha & 3.0.0-beta.
The socket conection parameter was moved from the Client's constructor to
The socket conection parameter was moved from the Client's constructor to
Client#sendRequest(ConfiguresSocketConnection $connection, ProvidesRequestData $request) : ProvidesResponseData
andClient#sendAsyncRequest(ConfiguresSocketConnection $connection, ProvidesRequestData $request) : intin order to allow sending (equal) requests to different FastCGI servers using the same Client instance. - [#45]
Removed method ProvidesResponseData#getRequestId() : int and Response#getRequestId() : int respectively in order
to avoid confusion about the semantics of the term "request ID" and misusage by assuming it is a unique ID for each
request (which it is not). Also the first constructor parameter of the Response class was removed with this change.
Renamed all $requestId(s) parameters to $socketId(s) in order to reflect the correct semantics of the ID. - [#39]
Renamed method Client#getRequestIdsHavingResponse() : array<int>
to Client#getSocketIdsHavingResponse() : array<int> in order to reflect the correct semantics of the returned array
of IDs. - [#39]
…with Response#getOutput(). The method was deprecated since version 2.6.0.
Method Response#getHeaders() : array will now return a two-dimensional array with grouped values to support
multi-value headers. Previous versions returned a one-dimensional key-value array.
# Previous versions
[
'Status' => 'HTTP/2 200 OK',
'Set-Cookie' => 'tasty_cookie=strawberry',
]
# Since 3.0.0-alpha
[
'Status' => [
'HTTP/2 200 OK',
],
'Set-Cookie' => [
'yummy_cookie=choco',
'tasty_cookie=strawberry',
],
]
Method Response#getHeader(string $headerKey) : array will now return an array containing all values for the given
header key to support multi-value headers. Previous versions returned the last value as a string.
echo $response->getHeader('Set-Cookie');
# Previous versions
'tasty_cookie=strawberry'
# Since 3.0.0-alpha
[
'yummy_cookie=choco',
'tasty_cookie=strawberry'
]
Method Response#getRawResponse() : string is no longer available and its usage must be replaced
with Response#getOutput(). The method was deprecated since version 2.6.0.
Response#getHeaderLine(string $headerKey) : string that returns all values, separated by comma, for the given
key. - [#35]Response#getHeader(string $headerKey) : array
and Response#getHeaderLine(string $headerKey) : string. - [#35]Response#getRawResponse() : string that was deprecated in version 2.6.0 in favour
of Response#getOutput() : string. - [#36]Handling of stream_select returning false in case of a system call interrupt. - [#41]
stream_select returning false in case of a system call interrupt. - [#41]pm.max_children setting. - [#40]Remove failed sockets from internal collection that errored out during reading of response in order to prevent infinite tries/re-use of those failed c
Re-using of idle sockets for successive requests - [#33]
Two new methods to Response class - [#27]
Two new methods to Response class - [#27]
Response#getOutput() which is identical to Response#getRawResponse() and will return the complete output from
the STDOUT stream of the response.Response#getError() which will return the complete output of the STDERR stream of the response.Second parameter $errorBuffer in tha pass through callback signature - [#27]
$callback = function( string $outputBuffer, string $errorBuffer ) {};
This parameter will contain the contents of the STDERR stream packets.
Response#getRawResponse() in favour of consistant naming. This method will be removed in v3.0.0 - [#27]ProcessManagerException that was introduced in v2.5.0 - [#27]
Please read this blog post why this (BC breaking)
change was necessary and how to handle server-sent errors now.bin/fcgiget to accept full URL paths and print STDOUT and STDERR outputNew ProcessManagerException in case the php-fpm responds with packages of type STDERR. This refers mainly to the error Primary script unknown resp. th
New ProcessManagerException in case the php-fpm responds with packages of type STDERR. This refers mainly to the
error Primary script unknown resp. the response File not found..
CI builds for PHP 7.3
Value of Client::STREAM_SELECT_USEC was to low with 20000 and was updated to 200000 as recommended in the official PHP documentation. - [#20]
20000 and was updated to 200000 as
recommended in the official PHP documentation. - [#20]Missing data in php://input on worker side when client sends content larger than 65535 bytes - [#15]
php://input on worker side when client sends content larger than 65535 bytes - [#15]PHP warning when trying to get ready request IDs - [#14]
Ability to add pass through callbacks in order to access output buffer from a long running callee - [#11] See an example in the documentation for furt
Replaced methods getHost() and getPort() with getSocketAddress() in interface hollodotme\FastCGI\Interfaces\ConfiguresSocketConnection - [#9]
getHost() and getPort() with getSocketAddress() in
interface hollodotme\FastCGI\Interfaces\ConfiguresSocketConnection - [#9]unix:// must be omitted for the first parameter
of hollodotme\FastCGI\SocketConnections\UnixDomainSocketfsockopen() with stream_socket_client() for connecting to php-fpm. - [#9]Method addResponseCallbacks(callable ...$callbacks) to all request classes to enable response evaluation delegation
addResponseCallbacks(callable ...$callbacks) to all request classes to enable response evaluation delegation
addFailureCallbacks(callable ...$callbacks) to all request classes to enable exception handling delegationreadResponse(int $requestId, ?int $timeoutMs = null) : ProvidesResponseData to read and retrieve a single
responsereadResponses(?int $imeoutMs = null, int ...$requestIds) : \Generator to read and yield multiple responsesreadReadyResponses(?int $imeoutMs = null) : \Generator to check for ready responses, read and yield themwaitForResponses(?int $timeout = null) to Client class for waiting for multiple responses and calling the
respective response callbacks - [#5]getRequestIdsHavingResponse() : array to enable reactive read of responses as they occurhasUnhandledResponses() : bool to check for outstanding responseshandleResponse(int $requestId, ?int $timeoutMs = null) to fetch a specific response and notify the respective
response callbackhandleResponses(?int $timeoutMs = null, int ...$requestIds) to fetch a specific responses and notify the
respective response callbackshandleReadyResponses(?int $timeoutMs = null) to check for ready responses, fetch them and notify the
respective response callbackswaitForResponse(int $requestId, ?int $timeoutMs = null) is not returning a response anymore, but will call
the response callbackreadResponse(int $requestId, ?int $timeoutMs = null): ProvidesResponseData if you want to get the response
directly.Methods sendRequest and sendAsyncRequest expect to get an object of interface hollodotme\FastCGI\Interfaces\ProvidesRequestData - [#5]
sendRequest and sendAsyncRequest expect to get an object of
interface hollodotme\FastCGI\Interfaces\ProvidesRequestData - [#5]sendRequest and waitForResponse now return an object of
interface hollodotme\FastCGI\Interfaces\ProvidesResponseData - [#2]GET, POST, PUT, PATCH and DELETE
in hollodotme\FastCGI\Constants\RequestMethod - [#5]HTTP/1.0 and HTTP/1.1 in hollodotme\FastCGI\Constants\ServerProtocol
hollodotme\FastCGI\Requests\GetRequesthollodotme\FastCGI\Requests\PostRequesthollodotme\FastCGI\Requests\PutRequesthollodotme\FastCGI\Requests\PatchRequesthollodotme\FastCGI\Requests\DeleteRequestErroneous response returned by Client::sendRequest() and Client::waitForResponse() - [#1]
Class constant visibility to private in class Client
ClientEncoders\PacketEncoderSocketConnections\DefaultsNothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Based on Pierrick Charron's PHP-FastCGI-Client:
Based on Pierrick Charron's PHP-FastCGI-Client:
ConfiguresSocketConnectionUnixDomainSocket and NetworkSocketFastCGIClientExceptionForbiddenException, ReadFailedException, TimeoutException, WriteFailedExceptionClient now expects a ConfiguresSocketConnection instanceClient->request() to Client->sendRequest()Client->async_request() to Client->sendAsyncRequest()Client->wait_for_response() to Client->waitForResponse()ClientClient (now part of the
socket connection)Client->getValues()Your coding agent can read these notes before it upgrades. Set up the MCP server →