Skip to content

Releases: hollodotme/fast-cgi-client

Version 3.1.7

07 Dec 10:15
v3.1.7
062182d
Compare
Choose a tag to compare

CHANGELOG

All notable changes to this project will be documented in this file. This project adheres
to Semantic Versioning and Keep a CHANGELOG.

[3.1.7] - 2021-12-07

  • Make sure length values are within valid bounds

[3.1.6] - 2021-09-23

Added

  • PHP 8.1 comaptibility

[3.1.5] - 2020-12-10

Fixed

  • Transfer of multipart/form-data blocks - [#64]
    • Removes base64 encoding for contents of files to transfer
    • Removes Content-Transfer-Encoding: base64 header from multipart block for files
    • Improves determination of file's MIME type via mime_content_type(), if available
    • Adds tests for multipart transfer of files with binary content (images)

[3.1.4] - 2020-11-23

Added

  • PHP 8.1 compatibility
  • Makefile to run all tests based on docker-compose config

Fixed

  • TypeError on PHP 8 for a resource that is neither null nor a resource
  • Added ext-xdebug as dev-requirement in composer.json
  • Xdebug 3 coverage filter constant name for PHP 8

Replaced

  • Local shell script to run tests with Makefile

Removed

  • CI Builds on Circle-CI

[3.1.3] - 2020-08-13

Fixed

  • Remove broken sockets from socket collection if writing the request to stream fails - [#61]
  • Do not export docker-compose.yml with composer archives via .gitattributes
  • Stabilize unreliable tests with signaled pool processes

[3.1.2] - 2020-05-19

Added

  • .gitattributes file to exclude non-relevant files/directories from archives/releases installed by composer - [#58]

Fixed

  • Remove link to bin/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)

[3.1.1] - 2020-05-06

Fixed

  • Backwards compatibility break in userland classes extending AbstractRequest due to a final constructor. - [#56]
    See also: [#55]

[3.1.0] - 2020-05-06

Added

  • Interface for request content composers with implementations for URL encoded form-data, multipart form-data and JSON
    data. This was inspired by - [#53]
  • Named constructor newWithRequestContent to all request classes in order to simplify the use of the new request
    content type composers.
  • For more information and examples have a look at the documentation
    section "Request contents".

Fixed

  • Inspection issues found by PHPStan

Updated

  • Test suites to cover PHP versions from 7.1 to 7.4
  • License dates
  • CI moved to GitHub actions

[3.0.1] - 2019-10-24

Added

  • PHP 7.4 CI pipeline and docker-compose environment
  • Explicitly set error_reporting=-1 for CI and tests in order to capture deprecation warnings

Fixed

  • Replace usage of curly brace syntax for accessing string offsets, which is deprecated in PHP 7.4 - [#51]

[3.0.0] - 2019-07-29

Please take notice of the backwards incompatible changes (BC breaks) documented below in the changelog
of 3.0.0-alpha & 3.0.0-beta.

Added

  • Reserved private constant for ABORT_REQUEST instruction for future use
  • Socket ID is now represented and generated by a proper type class

Improved

  • Import of root namespace functions
  • Dependency injection for socket implementation

[3.0.0-beta] - 2019-06-24

Backwards incompatible changes (BC breaks)

  • The socket conection parameter was moved from the Client's constructor to

    • Client#sendRequest(ConfiguresSocketConnection $connection, ProvidesRequestData $request) : ProvidesResponseData
      and
    • Client#sendAsyncRequest(ConfiguresSocketConnection $connection, ProvidesRequestData $request) : int

    in 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]

[3.0.0-alpha] - 2019-04-30

Backwards incompatible changes (BC breaks)

  • 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.

Added

  • Method Response#getHeaderLine(string $headerKey) : string that returns all values, separated by comma, for the given
    key. - [#35]
  • Header keys are now case-insensitive in Response#getHeader(string $headerKey) : array
    and Response#getHeaderLine(string $headerKey) : string. - [#35]

Removed

  • Method Response#getRawResponse() : string that was deprecated in version 2.6.0 in favour
    of Response#getOutput() : string. - [#36]

[2.7.2] - 2019-05-31

Improved

  • Handling of stream_select returning false in case of a system call interrupt. - [#41]

Fixed

  • Remove/close sockets after fetching their responses triggered async requests in order to prevent halt on further
    request processing, if the number of requests exceeds php-fpm's pm.max_children setting. - [#40]

[2.7.1] - 2019-04-29

Fixed

  • Remove failed sockets from internal collection that errored out during reading of response in order to prevent
    infinite tries/re-use of those failed connections. - [#37]

[2.7.0] - 2019-04-28

Added

  • Re-using of idle sockets for successive requests - [#33]

[2.6.0] - 2019-04-02

Added

  • 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.

Deprecated

  • Response#getRawResponse() in favour of consistant naming. This method will be removed in v3.0.0 - [#27]

Removed

  • 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.

Fixed

  • bin/fcgiget to accept full URL paths and print STDOUT and STDERR output

Improved

  • Documentation

[2.5.0] - 2019-01-29

Added

  • 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

[2.4.3] - 2018-09-17

Fixes

[2.4.2] - 2018-01-28

Fixes

  • Missing data in php://input on worker side when client sends content larger than 65535 bytes - [#15]

[2.4.1] - 2017-11-19

Fixes

  • PHP warning when trying to get ready request IDs - [#14]

Improves

  • Loop performance

[2.4.0] - 2017-09-28

Added

  • 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 further informaiton.

[2.3.0] - 2017-06-15

Changed

  • Replaced methods getHost() and getPort() with getSocketAddress() in
    interface hollodotme\FastCGI\Interfaces\ConfiguresSocketConnection - [#9]
  • The transport protocol unix:// must be omitted for the first parameter
    of hollodotme\FastCGI\SocketConnections\UnixDomainSocket
    Only the socket path must be passed. - [#9]
  • Replaced fsockopen() with stream_socket_client() for connecting to php-fpm. - [#9]

[2.2.0] - 2017-04-15

Added

  • Method addResponseCallbacks(callable ...$callbacks) to all request classes to enable response evaluation delegation
  • Method addFailureCallbacks(callable ...$callbacks) to all request classes to enable exception handling delegation
  • Method readResponse(int $requestId, ?int $timeoutMs = null) : ProvidesResponseData to read and retrieve a single
    response
  • Method `readResponses(?int $imeoutMs = null, int ...$requestIds) : \Gen...
Read more

Version 3.1.6

23 Sep 10:10
v3.1.6
c8c7969
Compare
Choose a tag to compare

CHANGELOG

All notable changes to this project will be documented in this file. This project adheres
to Semantic Versioning and Keep a CHANGELOG.

[3.1.6] - 2021-09-23

Added

  • PHP 8.1 comaptibility

[3.1.5] - 2020-12-10

Fixed

  • Transfer of multipart/form-data blocks - [#64]
    • Removes base64 encoding for contents of files to transfer
    • Removes Content-Transfer-Encoding: base64 header from multipart block for files
    • Improves determination of file's MIME type via mime_content_type(), if available
    • Adds tests for multipart transfer of files with binary content (images)

[3.1.4] - 2020-11-23

Added

  • PHP 8.1 compatibility
  • Makefile to run all tests based on docker-compose config

Fixed

  • TypeError on PHP 8 for a resource that is neither null nor a resource
  • Added ext-xdebug as dev-requirement in composer.json
  • Xdebug 3 coverage filter constant name for PHP 8

Replaced

  • Local shell script to run tests with Makefile

Removed

  • CI Builds on Circle-CI

[3.1.3] - 2020-08-13

Fixed

  • Remove broken sockets from socket collection if writing the request to stream fails - [#61]
  • Do not export docker-compose.yml with composer archives via .gitattributes
  • Stabilize unreliable tests with signaled pool processes

[3.1.2] - 2020-05-19

Added

  • .gitattributes file to exclude non-relevant files/directories from archives/releases installed by composer - [#58]

Fixed

  • Remove link to bin/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)

[3.1.1] - 2020-05-06

Fixed

  • Backwards compatibility break in userland classes extending AbstractRequest due to a final constructor. - [#56]
    See also: [#55]

[3.1.0] - 2020-05-06

Added

  • Interface for request content composers with implementations for URL encoded form-data, multipart form-data and JSON
    data. This was inspired by - [#53]
  • Named constructor newWithRequestContent to all request classes in order to simplify the use of the new request
    content type composers.
  • For more information and examples have a look at the documentation
    section "Request contents".

Fixed

  • Inspection issues found by PHPStan

Updated

  • Test suites to cover PHP versions from 7.1 to 7.4
  • License dates
  • CI moved to GitHub actions

[3.0.1] - 2019-10-24

Added

  • PHP 7.4 CI pipeline and docker-compose environment
  • Explicitly set error_reporting=-1 for CI and tests in order to capture deprecation warnings

Fixed

  • Replace usage of curly brace syntax for accessing string offsets, which is deprecated in PHP 7.4 - [#51]

[3.0.0] - 2019-07-29

Please take notice of the backwards incompatible changes (BC breaks) documented below in the changelog
of 3.0.0-alpha & 3.0.0-beta.

Added

  • Reserved private constant for ABORT_REQUEST instruction for future use
  • Socket ID is now represented and generated by a proper type class

Improved

  • Import of root namespace functions
  • Dependency injection for socket implementation

[3.0.0-beta] - 2019-06-24

Backwards incompatible changes (BC breaks)

  • The socket conection parameter was moved from the Client's constructor to

    • Client#sendRequest(ConfiguresSocketConnection $connection, ProvidesRequestData $request) : ProvidesResponseData
      and
    • Client#sendAsyncRequest(ConfiguresSocketConnection $connection, ProvidesRequestData $request) : int

    in 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]

[3.0.0-alpha] - 2019-04-30

Backwards incompatible changes (BC breaks)

  • 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.

Added

  • Method Response#getHeaderLine(string $headerKey) : string that returns all values, separated by comma, for the given
    key. - [#35]
  • Header keys are now case-insensitive in Response#getHeader(string $headerKey) : array
    and Response#getHeaderLine(string $headerKey) : string. - [#35]

Removed

  • Method Response#getRawResponse() : string that was deprecated in version 2.6.0 in favour
    of Response#getOutput() : string. - [#36]

[2.7.2] - 2019-05-31

Improved

  • Handling of stream_select returning false in case of a system call interrupt. - [#41]

Fixed

  • Remove/close sockets after fetching their responses triggered async requests in order to prevent halt on further
    request processing, if the number of requests exceeds php-fpm's pm.max_children setting. - [#40]

[2.7.1] - 2019-04-29

Fixed

  • Remove failed sockets from internal collection that errored out during reading of response in order to prevent
    infinite tries/re-use of those failed connections. - [#37]

[2.7.0] - 2019-04-28

Added

  • Re-using of idle sockets for successive requests - [#33]

[2.6.0] - 2019-04-02

Added

  • 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.

Deprecated

  • Response#getRawResponse() in favour of consistant naming. This method will be removed in v3.0.0 - [#27]

Removed

  • 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.

Fixed

  • bin/fcgiget to accept full URL paths and print STDOUT and STDERR output

Improved

  • Documentation

[2.5.0] - 2019-01-29

Added

  • 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

[2.4.3] - 2018-09-17

Fixes

[2.4.2] - 2018-01-28

Fixes

  • Missing data in php://input on worker side when client sends content larger than 65535 bytes - [#15]

[2.4.1] - 2017-11-19

Fixes

  • PHP warning when trying to get ready request IDs - [#14]

Improves

  • Loop performance

[2.4.0] - 2017-09-28

Added

  • 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 further informaiton.

[2.3.0] - 2017-06-15

Changed

  • Replaced methods getHost() and getPort() with getSocketAddress() in
    interface hollodotme\FastCGI\Interfaces\ConfiguresSocketConnection - [#9]
  • The transport protocol unix:// must be omitted for the first parameter
    of hollodotme\FastCGI\SocketConnections\UnixDomainSocket
    Only the socket path must be passed. - [#9]
  • Replaced fsockopen() with stream_socket_client() for connecting to php-fpm. - [#9]

[2.2.0] - 2017-04-15

Added

  • Method addResponseCallbacks(callable ...$callbacks) to all request classes to enable response evaluation delegation
  • Method addFailureCallbacks(callable ...$callbacks) to all request classes to enable exception handling delegation
  • Method readResponse(int $requestId, ?int $timeoutMs = null) : ProvidesResponseData to read and retrieve a single
    response
  • Method readResponses(?int $imeoutMs = null, int ...$requestIds) : \Generator to read and yield multiple responses
  • Method `readReadyResponses(?i...
Read more

Version 3.1.5

10 Dec 10:19
v3.1.5
8a9b2bd
Compare
Choose a tag to compare

CHANGELOG

All notable changes to this project will be documented in this file. This project adheres
to Semantic Versioning and Keep a CHANGELOG.

[3.1.5] - 2020-12-10

Fixed

  • Transfer of multipart/form-data blocks - [#64]
    • Removes base64 encoding for contents of files to transfer
    • Removes Content-Transfer-Encoding: base64 header from multipart block for files
    • Improves determination of file's MIME type via mime_content_type(), if available
    • Adds tests for multipart transfer of files with binary content (images)

[3.1.4] - 2020-11-23

Added

  • PHP 8 compatibility
  • Makefile to run all tests based on docker-compose config

Fixed

  • TypeError on PHP 8 for a resource that is neither null nor a resource
  • Added ext-xdebug as dev-requirement in composer.json
  • Xdebug 3 coverage filter constant name for PHP 8

Replaced

  • Local shell script to run tests with Makefile

Removed

  • CI Builds on Circle-CI

[3.1.3] - 2020-08-13

Fixed

  • Remove broken sockets from socket collection if writing the request to stream fails - [#61]
  • Do not export docker-compose.yml with composer archives via .gitattributes
  • Stabilize unreliable tests with signaled pool processes

[3.1.2] - 2020-05-19

Added

  • .gitattributes file to exclude non-relevant files/directories from archives/releases installed by composer - [#58]

Fixed

  • Remove link to bin/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)

[3.1.1] - 2020-05-06

Fixed

  • Backwards compatibility break in userland classes extending AbstractRequest due to a final constructor. - [#56]
    See also: [#55]

[3.1.0] - 2020-05-06

Added

  • Interface for request content composers with implementations for URL encoded form-data, multipart form-data and JSON data.
    This was inspired by - [#53]
  • Named constructor newWithRequestContent to all request classes in order to simplify the use of the new request content type composers.
  • For more information and examples have a look at the documentation section "Request contents".

Fixed

  • Inspection issues found by PHPStan

Updated

  • Test suites to cover PHP versions from 7.1 to 7.4
  • License dates
  • CI moved to GitHub actions

[3.0.1] - 2019-10-24

Added

  • PHP 7.4 CI pipeline and docker-compose environment
  • Explicitly set error_reporting=-1 for CI and tests in order to capture deprecation warnings

Fixed

  • Replace usage of curly brace syntax for accessing string offsets, which is deprecated in PHP 7.4 - [#51]

[3.0.0] - 2019-07-29

Please take notice of the backwards incompatible changes (BC breaks) documented below
in the changelog of 3.0.0-alpha & 3.0.0-beta.

Added

  • Reserved private constant for ABORT_REQUEST instruction for future use
  • Socket ID is now represented and generated by a proper type class

Improved

  • Import of root namespace functions
  • Dependency injection for socket implementation

[3.0.0-beta] - 2019-06-24

Backwards incompatible changes (BC breaks)

  • The socket conection parameter was moved from the Client's constructor to

    • Client#sendRequest(ConfiguresSocketConnection $connection, ProvidesRequestData $request) : ProvidesResponseData and
    • Client#sendAsyncRequest(ConfiguresSocketConnection $connection, ProvidesRequestData $request) : int

    in 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]

[3.0.0-alpha] - 2019-04-30

Backwards incompatible changes (BC breaks)

  • 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.

Added

  • Method Response#getHeaderLine(string $headerKey) : string that returns all values, separated by comma, for the given key. - [#35]
  • Header keys are now case-insensitive in Response#getHeader(string $headerKey) : array and Response#getHeaderLine(string $headerKey) : string. - [#35]

Removed

  • Method Response#getRawResponse() : string that was deprecated in version 2.6.0 in favour of Response#getOutput() : string. - [#36]

[2.7.2] - 2019-05-31

Improved

  • Handling of stream_select returning false in case of a system call interrupt. - [#41]

Fixed

  • Remove/close sockets after fetching their responses triggered async requests in order to prevent halt on further
    request processing, if the number of requests exceeds php-fpm's pm.max_children setting. - [#40]

[2.7.1] - 2019-04-29

Fixed

  • Remove failed sockets from internal collection that errored out during reading of response in order to prevent infinite
    tries/re-use of those failed connections. - [#37]

[2.7.0] - 2019-04-28

Added

  • Re-using of idle sockets for successive requests - [#33]

[2.6.0] - 2019-04-02

Added

  • 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.

Deprecated

  • Response#getRawResponse() in favour of consistant naming. This method will be removed in v3.0.0 - [#27]

Removed

  • 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.

Fixed

  • bin/fcgiget to accept full URL paths and print STDOUT and STDERR output

Improved

  • Documentation

[2.5.0] - 2019-01-29

Added

  • 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

[2.4.3] - 2018-09-17

Fixes

[2.4.2] - 2018-01-28

Fixes

  • Missing data in php://input on worker side when client sends content larger than 65535 bytes - [#15]

[2.4.1] - 2017-11-19

Fixes

  • PHP warning when trying to get ready request IDs - [#14]

Improves

  • Loop performance

[2.4.0] - 2017-09-28

Added

  • 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 further informaiton.

[2.3.0] - 2017-06-15

Changed

  • Replaced methods getHost() and getPort() with getSocketAddress() in interface hollodotme\FastCGI\Interfaces\ConfiguresSocketConnection - [#9]
  • The transport protocol unix:// must be omitted for the first parameter of hollodotme\FastCGI\SocketConnections\UnixDomainSocket
    Only the socket path must be passed. - [#9]
  • Replaced fsockopen() with stream_socket_client() for connecting to php-fpm. - [#9]

[2.2.0] - 2017-04-15

Added

  • Method addResponseCallbacks(callable ...$callbacks) to all request classes to enable response evaluation delegation - [#6]
  • Method addFailureCallbacks(callable ...$callbacks) to all request classes to enable exception handling delegation
  • Method readResponse(int $requestId, ?int $timeoutMs = null) : ProvidesResponseData to read and retrieve a single response
  • Method readResponses(?int $imeoutMs = null, int ...$requestIds) : \Generator to read and yield multiple responses
  • Method readReadyResponses(?int $imeoutMs = null) : \Generator to check for ready responses, rea...
Read more

Version 3.1.4

23 Nov 12:37
v3.1.4
b7bdfa2
Compare
Choose a tag to compare

CHANGELOG

All notable changes to this project will be documented in this file. This project adheres
to Semantic Versioning and Keep a CHANGELOG.

[3.1.4] - 2020-11-23

Added

  • PHP 8 compatibility
  • Makefile to run all tests based on docker-compose config

Fixed

  • TypeError on PHP 8 for a resource that is neither null nor a resource
  • Added ext-xdebug as dev-requirement in composer.json
  • Xdebug 3 coverage filter constant name for PHP 8

Replaced

  • Local shell script to run tests with Makefile

Removed

  • CI Builds on Circle-CI

[3.1.3] - 2020-08-13

Fixed

  • Remove broken sockets from socket collection if writing the request to stream fails - [#61]
  • Do not export docker-compose.yml with composer archives via .gitattributes
  • Stabilize unreliable tests with signaled pool processes

[3.1.2] - 2020-05-19

Added

  • .gitattributes file to exclude non-relevant files/directories from archives/releases installed by composer - [#58]

Fixed

  • Remove link to bin/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)

[3.1.1] - 2020-05-06

Fixed

  • Backwards compatibility break in userland classes extending AbstractRequest due to a final constructor. - [#56]
    See also: [#55]

[3.1.0] - 2020-05-06

Added

  • Interface for request content composers with implementations for URL encoded form-data, multipart form-data and JSON data.
    This was inspired by - [#53]
  • Named constructor newWithRequestContent to all request classes in order to simplify the use of the new request content type composers.
  • For more information and examples have a look at the documentation section "Request contents".

Fixed

  • Inspection issues found by PHPStan

Updated

  • Test suites to cover PHP versions from 7.1 to 7.4
  • License dates
  • CI moved to GitHub actions

[3.0.1] - 2019-10-24

Added

  • PHP 7.4 CI pipeline and docker-compose environment
  • Explicitly set error_reporting=-1 for CI and tests in order to capture deprecation warnings

Fixed

  • Replace usage of curly brace syntax for accessing string offsets, which is deprecated in PHP 7.4 - [#51]

[3.0.0] - 2019-07-29

Please take notice of the backwards incompatible changes (BC breaks) documented below
in the changelog of 3.0.0-alpha & 3.0.0-beta.

Added

  • Reserved private constant for ABORT_REQUEST instruction for future use
  • Socket ID is now represented and generated by a proper type class

Improved

  • Import of root namespace functions
  • Dependency injection for socket implementation

[3.0.0-beta] - 2019-06-24

Backwards incompatible changes (BC breaks)

  • The socket conection parameter was moved from the Client's constructor to

    • Client#sendRequest(ConfiguresSocketConnection $connection, ProvidesRequestData $request) : ProvidesResponseData and
    • Client#sendAsyncRequest(ConfiguresSocketConnection $connection, ProvidesRequestData $request) : int

    in 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]

[3.0.0-alpha] - 2019-04-30

Backwards incompatible changes (BC breaks)

  • 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.

Added

  • Method Response#getHeaderLine(string $headerKey) : string that returns all values, separated by comma, for the given key. - [#35]
  • Header keys are now case-insensitive in Response#getHeader(string $headerKey) : array and Response#getHeaderLine(string $headerKey) : string. - [#35]

Removed

  • Method Response#getRawResponse() : string that was deprecated in version 2.6.0 in favour of Response#getOutput() : string. - [#36]

[2.7.2] - 2019-05-31

Improved

  • Handling of stream_select returning false in case of a system call interrupt. - [#41]

Fixed

  • Remove/close sockets after fetching their responses triggered async requests in order to prevent halt on further
    request processing, if the number of requests exceeds php-fpm's pm.max_children setting. - [#40]

[2.7.1] - 2019-04-29

Fixed

  • Remove failed sockets from internal collection that errored out during reading of response in order to prevent infinite
    tries/re-use of those failed connections. - [#37]

[2.7.0] - 2019-04-28

Added

  • Re-using of idle sockets for successive requests - [#33]

[2.6.0] - 2019-04-02

Added

  • 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.

Deprecated

  • Response#getRawResponse() in favour of consistant naming. This method will be removed in v3.0.0 - [#27]

Removed

  • 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.

Fixed

  • bin/fcgiget to accept full URL paths and print STDOUT and STDERR output

Improved

  • Documentation

[2.5.0] - 2019-01-29

Added

  • 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

[2.4.3] - 2018-09-17

Fixes

[2.4.2] - 2018-01-28

Fixes

  • Missing data in php://input on worker side when client sends content larger than 65535 bytes - [#15]

[2.4.1] - 2017-11-19

Fixes

  • PHP warning when trying to get ready request IDs - [#14]

Improves

  • Loop performance

[2.4.0] - 2017-09-28

Added

  • 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 further informaiton.

[2.3.0] - 2017-06-15

Changed

  • Replaced methods getHost() and getPort() with getSocketAddress() in interface hollodotme\FastCGI\Interfaces\ConfiguresSocketConnection - [#9]
  • The transport protocol unix:// must be omitted for the first parameter of hollodotme\FastCGI\SocketConnections\UnixDomainSocket
    Only the socket path must be passed. - [#9]
  • Replaced fsockopen() with stream_socket_client() for connecting to php-fpm. - [#9]

[2.2.0] - 2017-04-15

Added

  • Method addResponseCallbacks(callable ...$callbacks) to all request classes to enable response evaluation delegation - [#6]
  • Method addFailureCallbacks(callable ...$callbacks) to all request classes to enable exception handling delegation
  • Method readResponse(int $requestId, ?int $timeoutMs = null) : ProvidesResponseData to read and retrieve a single response
  • Method readResponses(?int $imeoutMs = null, int ...$requestIds) : \Generator to read and yield multiple responses
  • Method readReadyResponses(?int $imeoutMs = null) : \Generator to check for ready responses, read and yield them
  • Method waitForResponses(?int $timeout = null) to Client class for waiting for multiple responses and calling the respective response callbacks - [#5]
  • Method getRequestIdsHavingResponse() : array to enable reactive read of responses as they occur
  • Method hasUnhandledResponses() : bool to check for outstanding responses
  • Method `handleResponse(int $requestId, ?int $...
Read more

Version 3.1.3

13 Aug 09:24
v3.1.3
8eb9d5c
Compare
Choose a tag to compare

CHANGELOG

All notable changes to this project will be documented in this file.
This project adheres to Semantic Versioning and Keep a CHANGELOG.

[3.1.3] - 2020-08-13

Fixed

  • Remove broken sockets from socket collection if writing the request to stream fails - [#61]
  • Do not export docker-compose.yml with composer archives via .gitattributes
  • Stabilize unreliable tests with signaled pool processes

[3.1.2] - 2020-05-19

Added

  • .gitattributes file to exclude non-relevant files/directories from archives/releases installed by composer - [#58]

Fixed

  • Remove link to bin/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)

[3.1.1] - 2020-05-06

Fixed

  • Backwards compatibility break in userland classes extending AbstractRequest due to a final constructor. - [#56]
    See also: [#55]

[3.1.0] - 2020-05-06

Added

  • Interface for request content composers with implementations for URL encoded form-data, multipart form-data and JSON data.
    This was inspired by - [#53]
  • Named constructor newWithRequestContent to all request classes in order to simplify the use of the new request content type composers.
  • For more information and examples have a look at the documentation section "Request contents".

Fixed

  • Inspection issues found by PHPStan

Updated

  • Test suites to cover PHP versions from 7.1 to 7.4
  • License dates
  • CI moved to GitHub actions

[3.0.1] - 2019-10-24

Added

  • PHP 7.4 CI pipeline and docker-compose environment
  • Explicitly set error_reporting=-1 for CI and tests in order to capture deprecation warnings

Fixed

  • Replace usage of curly brace syntax for accessing string offsets, which is deprecated in PHP 7.4 - [#51]

[3.0.0] - 2019-07-29

Please take notice of the backwards incompatible changes (BC breaks) documented below
in the changelog of 3.0.0-alpha & 3.0.0-beta.

Added

  • Reserved private constant for ABORT_REQUEST instruction for future use
  • Socket ID is now represented and generated by a proper type class

Improved

  • Import of root namespace functions
  • Dependency injection for socket implementation

[3.0.0-beta] - 2019-06-24

Backwards incompatible changes (BC breaks)

  • The socket conection parameter was moved from the Client's constructor to

    • Client#sendRequest(ConfiguresSocketConnection $connection, ProvidesRequestData $request) : ProvidesResponseData and
    • Client#sendAsyncRequest(ConfiguresSocketConnection $connection, ProvidesRequestData $request) : int

    in 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]

[3.0.0-alpha] - 2019-04-30

Backwards incompatible changes (BC breaks)

  • 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.

Added

  • Method Response#getHeaderLine(string $headerKey) : string that returns all values, separated by comma, for the given key. - [#35]
  • Header keys are now case-insensitive in Response#getHeader(string $headerKey) : array and Response#getHeaderLine(string $headerKey) : string. - [#35]

Removed

  • Method Response#getRawResponse() : string that was deprecated in version 2.6.0 in favour of Response#getOutput() : string. - [#36]

[2.7.2] - 2019-05-31

Improved

  • Handling of stream_select returning false in case of a system call interrupt. - [#41]

Fixed

  • Remove/close sockets after fetching their responses triggered async requests in order to prevent halt on further
    request processing, if the number of requests exceeds php-fpm's pm.max_children setting. - [#40]

[2.7.1] - 2019-04-29

Fixed

  • Remove failed sockets from internal collection that errored out during reading of response in order to prevent infinite
    tries/re-use of those failed connections. - [#37]

[2.7.0] - 2019-04-28

Added

  • Re-using of idle sockets for successive requests - [#33]

[2.6.0] - 2019-04-02

Added

  • 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.

Deprecated

  • Response#getRawResponse() in favour of consistant naming. This method will be removed in v3.0.0 - [#27]

Removed

  • 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.

Fixed

  • bin/fcgiget to accept full URL paths and print STDOUT and STDERR output

Improved

  • Documentation

[2.5.0] - 2019-01-29

Added

  • 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

[2.4.3] - 2018-09-17

Fixes

[2.4.2] - 2018-01-28

Fixes

  • Missing data in php://input on worker side when client sends content larger than 65535 bytes - [#15]

[2.4.1] - 2017-11-19

Fixes

  • PHP warning when trying to get ready request IDs - [#14]

Improves

  • Loop performance

[2.4.0] - 2017-09-28

Added

  • 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 further informaiton.

[2.3.0] - 2017-06-15

Changed

  • Replaced methods getHost() and getPort() with getSocketAddress() in interface hollodotme\FastCGI\Interfaces\ConfiguresSocketConnection - [#9]
  • The transport protocol unix:// must be omitted for the first parameter of hollodotme\FastCGI\SocketConnections\UnixDomainSocket
    Only the socket path must be passed. - [#9]
  • Replaced fsockopen() with stream_socket_client() for connecting to php-fpm. - [#9]

[2.2.0] - 2017-04-15

Added

  • Method addResponseCallbacks(callable ...$callbacks) to all request classes to enable response evaluation delegation - [#6]
  • Method addFailureCallbacks(callable ...$callbacks) to all request classes to enable exception handling delegation
  • Method readResponse(int $requestId, ?int $timeoutMs = null) : ProvidesResponseData to read and retrieve a single response
  • Method readResponses(?int $imeoutMs = null, int ...$requestIds) : \Generator to read and yield multiple responses
  • Method readReadyResponses(?int $imeoutMs = null) : \Generator to check for ready responses, read and yield them
  • Method waitForResponses(?int $timeout = null) to Client class for waiting for multiple responses and calling the respective response callbacks - [#5]
  • Method getRequestIdsHavingResponse() : array to enable reactive read of responses as they occur
  • Method hasUnhandledResponses() : bool to check for outstanding responses
  • Method handleResponse(int $requestId, ?int $timeoutMs = null) to fetch a specific response and notify the respective response callback
  • Method handleResponses(?int $timeoutMs = null, int ...$requestIds) to fetch a specific responses and notify the respective response callbacks
  • Method handleReadyResponses(?int $timeoutMs = null) to check for ready responses, fetch them and notify the respective response callbacks

Changed

  • Method `waitForResp...
Read more

Version 3.1.2

19 May 15:41
v3.1.2
d97647b
Compare
Choose a tag to compare

CHANGELOG

All notable changes to this project will be documented in this file.
This project adheres to Semantic Versioning and Keep a CHANGELOG.

[3.1.2] - 2020-05-19

Added

  • .gitattributes file to exclude non-relevant files/directories from archives/releases installed by composer - [#58]

Fixed

  • Remove link to bin/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)

[3.1.1] - 2020-05-06

Fixed

  • Backwards compatibility break in userland classes extending AbstractRequest due to a final constructor. - [#56]
    See also: [#55]

[3.1.0] - 2020-05-06

Added

  • Interface for request content composers with implementations for URL encoded form-data, multipart form-data and JSON data.
    This was inspired by - [#53]
  • Named constructor newWithRequestContent to all request classes in order to simplify the use of the new request content type composers.
  • For more information and examples have a look at the documentation section "Request contents".

Fixed

  • Inspection issues found by PHPStan

Updated

  • Test suites to cover PHP versions from 7.1 to 7.4
  • License dates
  • CI moved to GitHub actions

[3.0.1] - 2019-10-24

Added

  • PHP 7.4 CI pipeline and docker-compose environment
  • Explicitly set error_reporting=-1 for CI and tests in order to capture deprecation warnings

Fixed

  • Replace usage of curly brace syntax for accessing string offsets, which is deprecated in PHP 7.4 - [#51]

[3.0.0] - 2019-07-29

Please take notice of the backwards incompatible changes (BC breaks) documented below
in the changelog of 3.0.0-alpha & 3.0.0-beta.

Added

  • Reserved private constant for ABORT_REQUEST instruction for future use
  • Socket ID is now represented and generated by a proper type class

Improved

  • Import of root namespace functions
  • Dependency injection for socket implementation

[3.0.0-beta] - 2019-06-24

Backwards incompatible changes (BC breaks)

  • The socket conection parameter was moved from the Client's constructor to

    • Client#sendRequest(ConfiguresSocketConnection $connection, ProvidesRequestData $request) : ProvidesResponseData and
    • Client#sendAsyncRequest(ConfiguresSocketConnection $connection, ProvidesRequestData $request) : int

    in 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]

[3.0.0-alpha] - 2019-04-30

Backwards incompatible changes (BC breaks)

  • 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.

Added

  • Method Response#getHeaderLine(string $headerKey) : string that returns all values, separated by comma, for the given key. - [#35]
  • Header keys are now case-insensitive in Response#getHeader(string $headerKey) : array and Response#getHeaderLine(string $headerKey) : string. - [#35]

Removed

  • Method Response#getRawResponse() : string that was deprecated in version 2.6.0 in favour of Response#getOutput() : string. - [#36]

[2.7.2] - 2019-05-31

Improved

  • Handling of stream_select returning false in case of a system call interrupt. - [#41]

Fixed

  • Remove/close sockets after fetching their responses triggered async requests in order to prevent halt on further
    request processing, if the number of requests exceeds php-fpm's pm.max_children setting. - [#40]

[2.7.1] - 2019-04-29

Fixed

  • Remove failed sockets from internal collection that errored out during reading of response in order to prevent infinite
    tries/re-use of those failed connections. - [#37]

[2.7.0] - 2019-04-28

Added

  • Re-using of idle sockets for successive requests - [#33]

[2.6.0] - 2019-04-02

Added

  • 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.

Deprecated

  • Response#getRawResponse() in favour of consistant naming. This method will be removed in v3.0.0 - [#27]

Removed

  • 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.

Fixed

  • bin/fcgiget to accept full URL paths and print STDOUT and STDERR output

Improved

  • Documentation

[2.5.0] - 2019-01-29

Added

  • 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

[2.4.3] - 2018-09-17

Fixes

[2.4.2] - 2018-01-28

Fixes

  • Missing data in php://input on worker side when client sends content larger than 65535 bytes - [#15]

[2.4.1] - 2017-11-19

Fixes

  • PHP warning when trying to get ready request IDs - [#14]

Improves

  • Loop performance

[2.4.0] - 2017-09-28

Added

  • 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 further informaiton.

[2.3.0] - 2017-06-15

Changed

  • Replaced methods getHost() and getPort() with getSocketAddress() in interface hollodotme\FastCGI\Interfaces\ConfiguresSocketConnection - [#9]
  • The transport protocol unix:// must be omitted for the first parameter of hollodotme\FastCGI\SocketConnections\UnixDomainSocket
    Only the socket path must be passed. - [#9]
  • Replaced fsockopen() with stream_socket_client() for connecting to php-fpm. - [#9]

[2.2.0] - 2017-04-15

Added

  • Method addResponseCallbacks(callable ...$callbacks) to all request classes to enable response evaluation delegation - [#6]
  • Method addFailureCallbacks(callable ...$callbacks) to all request classes to enable exception handling delegation
  • Method readResponse(int $requestId, ?int $timeoutMs = null) : ProvidesResponseData to read and retrieve a single response
  • Method readResponses(?int $imeoutMs = null, int ...$requestIds) : \Generator to read and yield multiple responses
  • Method readReadyResponses(?int $imeoutMs = null) : \Generator to check for ready responses, read and yield them
  • Method waitForResponses(?int $timeout = null) to Client class for waiting for multiple responses and calling the respective response callbacks - [#5]
  • Method getRequestIdsHavingResponse() : array to enable reactive read of responses as they occur
  • Method hasUnhandledResponses() : bool to check for outstanding responses
  • Method handleResponse(int $requestId, ?int $timeoutMs = null) to fetch a specific response and notify the respective response callback
  • Method handleResponses(?int $timeoutMs = null, int ...$requestIds) to fetch a specific responses and notify the respective response callbacks
  • Method handleReadyResponses(?int $timeoutMs = null) to check for ready responses, fetch them and notify the respective response callbacks

Changed

  • Method waitForResponse(int $requestId, ?int $timeoutMs = null) is not returning a response anymore, but will call the response callback
    Use readResponse(int $requestId, ?int $timeoutMs = null): ProvidesResponseData if you want to get the response directly.

Removed

  • Optional...
Read more

Version 3.1.1

06 May 13:48
v3.1.1
f67b10b
Compare
Choose a tag to compare

CHANGELOG

All notable changes to this project will be documented in this file.
This project adheres to Semantic Versioning and Keep a CHANGELOG.

[3.1.1] - 2020-05-06

Fixed

  • Backwards compatibility break in userland classes extending AbstractRequest due to a final constructor. - [#56]
    See also: [#55]

[3.1.0] - 2020-05-06

Added

  • Interface for request content composers with implementations for URL encoded form-data, multipart form-data and JSON data.
    This was inspired by - [#53]
  • Named constructor newWithRequestContent to all request classes in order to simplify the use of the new request content type composers.
  • For more information and examples have a look at the documentation section "Request contents".

Fixed

  • Inspection issues found by PHPStan

Updated

  • Test suites to cover PHP versions from 7.1 to 7.4
  • License dates
  • CI moved to GitHub actions

[3.0.1] - 2019-10-24

Added

  • PHP 7.4 CI pipeline and docker-compose environment
  • Explicitly set error_reporting=-1 for CI and tests in order to capture deprecation warnings

Fixed

  • Replace usage of curly brace syntax for accessing string offsets, which is deprecated in PHP 7.4 - [#51]

[3.0.0] - 2019-07-29

Please take notice of the backwards incompatible changes (BC breaks) documented below
in the changelog of 3.0.0-alpha & 3.0.0-beta.

Added

  • Reserved private constant for ABORT_REQUEST instruction for future use
  • Socket ID is now represented and generated by a proper type class

Improved

  • Import of root namespace functions
  • Dependency injection for socket implementation

[3.0.0-beta] - 2019-06-24

Backwards incompatible changes (BC breaks)

  • The socket conection parameter was moved from the Client's constructor to

    • Client#sendRequest(ConfiguresSocketConnection $connection, ProvidesRequestData $request) : ProvidesResponseData and
    • Client#sendAsyncRequest(ConfiguresSocketConnection $connection, ProvidesRequestData $request) : int

    in 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]

[3.0.0-alpha] - 2019-04-30

Backwards incompatible changes (BC breaks)

  • 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.

Added

  • Method Response#getHeaderLine(string $headerKey) : string that returns all values, separated by comma, for the given key. - [#35]
  • Header keys are now case-insensitive in Response#getHeader(string $headerKey) : array and Response#getHeaderLine(string $headerKey) : string. - [#35]

Removed

  • Method Response#getRawResponse() : string that was deprecated in version 2.6.0 in favour of Response#getOutput() : string. - [#36]

[2.7.2] - 2019-05-31

Improved

  • Handling of stream_select returning false in case of a system call interrupt. - [#41]

Fixed

  • Remove/close sockets after fetching their responses triggered async requests in order to prevent halt on further
    request processing, if the number of requests exceeds php-fpm's pm.max_children setting. - [#40]

[2.7.1] - 2019-04-29

Fixed

  • Remove failed sockets from internal collection that errored out during reading of response in order to prevent infinite
    tries/re-use of those failed connections. - [#37]

[2.7.0] - 2019-04-28

Added

  • Re-using of idle sockets for successive requests - [#33]

[2.6.0] - 2019-04-02

Added

  • 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.

Deprecated

  • Response#getRawResponse() in favour of consistant naming. This method will be removed in v3.0.0 - [#27]

Removed

  • 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.

Fixed

  • bin/fcgiget to accept full URL paths and print STDOUT and STDERR output

Improved

  • Documentation

[2.5.0] - 2019-01-29

Added

  • 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

[2.4.3] - 2018-09-17

Fixes

[2.4.2] - 2018-01-28

Fixes

  • Missing data in php://input on worker side when client sends content larger than 65535 bytes - [#15]

[2.4.1] - 2017-11-19

Fixes

  • PHP warning when trying to get ready request IDs - [#14]

Improves

  • Loop performance

[2.4.0] - 2017-09-28

Added

  • 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 further informaiton.

[2.3.0] - 2017-06-15

Changed

  • Replaced methods getHost() and getPort() with getSocketAddress() in interface hollodotme\FastCGI\Interfaces\ConfiguresSocketConnection - [#9]
  • The transport protocol unix:// must be omitted for the first parameter of hollodotme\FastCGI\SocketConnections\UnixDomainSocket
    Only the socket path must be passed. - [#9]
  • Replaced fsockopen() with stream_socket_client() for connecting to php-fpm. - [#9]

[2.2.0] - 2017-04-15

Added

  • Method addResponseCallbacks(callable ...$callbacks) to all request classes to enable response evaluation delegation - [#6]
  • Method addFailureCallbacks(callable ...$callbacks) to all request classes to enable exception handling delegation
  • Method readResponse(int $requestId, ?int $timeoutMs = null) : ProvidesResponseData to read and retrieve a single response
  • Method readResponses(?int $imeoutMs = null, int ...$requestIds) : \Generator to read and yield multiple responses
  • Method readReadyResponses(?int $imeoutMs = null) : \Generator to check for ready responses, read and yield them
  • Method waitForResponses(?int $timeout = null) to Client class for waiting for multiple responses and calling the respective response callbacks - [#5]
  • Method getRequestIdsHavingResponse() : array to enable reactive read of responses as they occur
  • Method hasUnhandledResponses() : bool to check for outstanding responses
  • Method handleResponse(int $requestId, ?int $timeoutMs = null) to fetch a specific response and notify the respective response callback
  • Method handleResponses(?int $timeoutMs = null, int ...$requestIds) to fetch a specific responses and notify the respective response callbacks
  • Method handleReadyResponses(?int $timeoutMs = null) to check for ready responses, fetch them and notify the respective response callbacks

Changed

  • Method waitForResponse(int $requestId, ?int $timeoutMs = null) is not returning a response anymore, but will call the response callback
    Use readResponse(int $requestId, ?int $timeoutMs = null): ProvidesResponseData if you want to get the response directly.

Removed

  • Optional flag to make a connection persistent (is now always disabled in favour of better timeout handling and FPM pool-children-scalability)
  • Optional flag to keep the server-side connection alive (is now always enabled, affects only network sockets)

Improved

  • Code coverage by automated integration tests
  • Timeout handling on multiple requests

[...

Read more

Version 3.1.0

06 May 11:26
v3.1.0
bfb8177
Compare
Choose a tag to compare

CHANGELOG

All notable changes to this project will be documented in this file.
This project adheres to Semantic Versioning and Keep a CHANGELOG.

[3.1.0] - 2020-05-06

Added

  • Interface for request content composers with implementations for URL encoded form-data, multipart form-data and JSON data.
    This was inspired by - [53]
  • Named constructor newWithRequestContent to all request classes in order to simplify the use of the new request content type composers.
  • For more information and examples have a look at the documentation section "Request contents".

Fixed

  • Inspection issues found by PHPStan

Updated

  • Test suites to cover PHP versions from 7.1 to 7.4
  • License dates
  • CI moved to GitHub actions

[3.0.1] - 2019-10-24

Added

  • PHP 7.4 CI pipeline and docker-compose environment
  • Explicitly set error_reporting=-1 for CI and tests in order to capture deprecation warnings

Fixed

  • Replace usage of curly brace syntax for accessing string offsets, which is deprecated in PHP 7.4 - [#51]

[3.0.0] - 2019-07-29

Please take notice of the backwards incompatible changes (BC breaks) documented below
in the changelog of 3.0.0-alpha & 3.0.0-beta.

Added

  • Reserved private constant for ABORT_REQUEST instruction for future use
  • Socket ID is now represented and generated by a proper type class

Improved

  • Import of root namespace functions
  • Dependency injection for socket implementation

[3.0.0-beta] - 2019-06-24

Backwards incompatible changes (BC breaks)

  • The socket conection parameter was moved from the Client's constructor to

    • Client#sendRequest(ConfiguresSocketConnection $connection, ProvidesRequestData $request) : ProvidesResponseData and
    • Client#sendAsyncRequest(ConfiguresSocketConnection $connection, ProvidesRequestData $request) : int

    in 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]

[3.0.0-alpha] - 2019-04-30

Backwards incompatible changes (BC breaks)

  • 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.

Added

  • Method Response#getHeaderLine(string $headerKey) : string that returns all values, separated by comma, for the given key. - [#35]
  • Header keys are now case-insensitive in Response#getHeader(string $headerKey) : array and Response#getHeaderLine(string $headerKey) : string. - [#35]

Removed

  • Method Response#getRawResponse() : string that was deprecated in version 2.6.0 in favour of Response#getOutput() : string. - [#36]

[2.7.2] - 2019-05-31

Improved

  • Handling of stream_select returning false in case of a system call interrupt. - [#41]

Fixed

  • Remove/close sockets after fetching their responses triggered async requests in order to prevent halt on further
    request processing, if the number of requests exceeds php-fpm's pm.max_children setting. - [#40]

[2.7.1] - 2019-04-29

Fixed

  • Remove failed sockets from internal collection that errored out during reading of response in order to prevent infinite
    tries/re-use of those failed connections. - [#37]

[2.7.0] - 2019-04-28

Added

  • Re-using of idle sockets for successive requests - [#33]

[2.6.0] - 2019-04-02

Added

  • 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.

Deprecated

  • Response#getRawResponse() in favour of consistant naming. This method will be removed in v3.0.0 - [#27]

Removed

  • 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.

Fixed

  • bin/fcgiget to accept full URL paths and print STDOUT and STDERR output

Improved

  • Documentation

[2.5.0] - 2019-01-29

Added

  • 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

[2.4.3] - 2018-09-17

Fixes

[2.4.2] - 2018-01-28

Fixes

  • Missing data in php://input on worker side when client sends content larger than 65535 bytes - [#15]

[2.4.1] - 2017-11-19

Fixes

  • PHP warning when trying to get ready request IDs - [#14]

Improves

  • Loop performance

[2.4.0] - 2017-09-28

Added

  • 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 further informaiton.

[2.3.0] - 2017-06-15

Changed

  • Replaced methods getHost() and getPort() with getSocketAddress() in interface hollodotme\FastCGI\Interfaces\ConfiguresSocketConnection - [#9]
  • The transport protocol unix:// must be omitted for the first parameter of hollodotme\FastCGI\SocketConnections\UnixDomainSocket
    Only the socket path must be passed. - [#9]
  • Replaced fsockopen() with stream_socket_client() for connecting to php-fpm. - [#9]

[2.2.0] - 2017-04-15

Added

  • Method addResponseCallbacks(callable ...$callbacks) to all request classes to enable response evaluation delegation - [#6]
  • Method addFailureCallbacks(callable ...$callbacks) to all request classes to enable exception handling delegation
  • Method readResponse(int $requestId, ?int $timeoutMs = null) : ProvidesResponseData to read and retrieve a single response
  • Method readResponses(?int $imeoutMs = null, int ...$requestIds) : \Generator to read and yield multiple responses
  • Method readReadyResponses(?int $imeoutMs = null) : \Generator to check for ready responses, read and yield them
  • Method waitForResponses(?int $timeout = null) to Client class for waiting for multiple responses and calling the respective response callbacks - [#5]
  • Method getRequestIdsHavingResponse() : array to enable reactive read of responses as they occur
  • Method hasUnhandledResponses() : bool to check for outstanding responses
  • Method handleResponse(int $requestId, ?int $timeoutMs = null) to fetch a specific response and notify the respective response callback
  • Method handleResponses(?int $timeoutMs = null, int ...$requestIds) to fetch a specific responses and notify the respective response callbacks
  • Method handleReadyResponses(?int $timeoutMs = null) to check for ready responses, fetch them and notify the respective response callbacks

Changed

  • Method waitForResponse(int $requestId, ?int $timeoutMs = null) is not returning a response anymore, but will call the response callback
    Use readResponse(int $requestId, ?int $timeoutMs = null): ProvidesResponseData if you want to get the response directly.

Removed

  • Optional flag to make a connection persistent (is now always disabled in favour of better timeout handling and FPM pool-children-scalability)
  • Optional flag to keep the server-side connection alive (is now always enabled, affects only network sockets)

Improved

  • Code coverage by automated integration tests
  • Timeout handling on multiple requests

[2.1.0] - 2017-03-07

Changed

  • Methods sendRequest and sendAsyncRequest expect to get an object of interface hollodotme\FastCGI\Interfaces\ProvidesRequestData - [...
Read more

Version 3.0.1

24 Oct 11:21
v3.0.1
d4a31fb
Compare
Choose a tag to compare

Version 3.0.0

29 Jul 08:46
v3.0.0
e518c0f
Compare
Choose a tag to compare