Weave Code
Code Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Fast Cgi Client Laravel Package

hollodotme/fast-cgi-client

High-performance FastCGI client for PHP that talks directly to PHP-FPM (no web server needed). Send requests, set env vars and stdin, read stdout/stderr, and run scripts in parallel—useful for CLIs, workers, or custom application servers.

View on GitHub
Deep Wiki
Context7
3.1.7
  • Make sure length values are within valid bounds
3.1.6

Added

  • PHP 8.1 comaptibility
3.1.5

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

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

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

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

Fixed

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

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

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

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

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]

2.7.2

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]
3.0.0-alpha

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

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

Added

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

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

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

    • [#26]
  • CI builds for PHP 7.3

2.4.3

Fixes

2.4.2

Fixes

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

Fixes

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

Improves

  • Loop performance
2.4.0

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

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

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

Changed

  • Methods sendRequest and sendAsyncRequest expect to get an object of interface hollodotme\FastCGI\Interfaces\ProvidesRequestData - [#5]
  • Methods sendRequest and waitForResponse now return an object of interface hollodotme\FastCGI\Interfaces\ProvidesResponseData - [#2]

Added

  • Public class constants for request methods GET, POST, PUT, PATCH and DELETE in hollodotme\FastCGI\Constants\RequestMethod - [#5]
  • Public class constants for server protocols HTTP/1.0 and HTTP/1.1 in hollodotme\FastCGI\Constants\ServerProtocol
    • [#5]
  • Abstract request class for implementing individual request methods, contains all request default values - [#5]
  • Request implementations: - [#5]
    • hollodotme\FastCGI\Requests\GetRequest
    • hollodotme\FastCGI\Requests\PostRequest
    • hollodotme\FastCGI\Requests\PutRequest
    • hollodotme\FastCGI\Requests\PatchRequest
    • hollodotme\FastCGI\Requests\DeleteRequest
  • Response implementation - [#2]
2.0.1

Fixed

  • Erroneous response returned by Client::sendRequest() and Client::waitForResponse() - [#1]

Changed

  • Testsuite updated for PHPUnit >= 6
2.0.0

Changed

  • Class constant visibility to private in class Client
  • Class constant visibility to privare in class Encoders\PacketEncoder
  • Class constant visibility to public in class SocketConnections\Defaults
  • Composer requires php >= 7.1
1.0.0

Based on Pierrick Charron's PHP-FastCGI-Client:

Added

  • Socket connection interface ConfiguresSocketConnection
  • Socket connection classes UnixDomainSocket and NetworkSocket
  • Base exception FastCGIClientException
  • Derived exceptions ForbiddenException, ReadFailedException, TimeoutException, WriteFailedException

Changed

  • Constructor of Client now expects a ConfiguresSocketConnection instance
  • Renamed Client->request() to Client->sendRequest()
  • Renamed Client->async_request() to Client->sendAsyncRequest()
  • Renamed Client->wait_for_response() to Client->waitForResponse()

Removed

  • Unused class constants from Client
  • Getters/Setters for connect timeout, read/write timeout, keep alive, socket persistence from Client (now part of the socket connection)
  • Method Client->getValues()
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
davejamesmiller/laravel-breadcrumbs
artisanry/parsedown
christhompsontldr/phpsdk
enqueue/dsn
bunny/bunny
enqueue/test
enqueue/null
enqueue/amqp-tools
milesj/emojibase
bower-asset/punycode
bower-asset/inputmask
bower-asset/jquery
bower-asset/yii2-pjax
laravel/nova
spatie/laravel-mailcoach
spatie/laravel-superseeder
laravel/liferaft
nst/json-test-suite
danielmiessler/sec-lists
jackalope/jackalope-transport