thingston / psr7
Implementation of PSR-7 standard for representing HTTP messages as described in RFC 7230 and RFC 7231, and URIs for use with HTTP messages as described in RFC 3986.
1.0.0
2026-05-12 09:47 UTC
Requires
- php: >=8.5
- psr/http-message: ^2.0
Requires (Dev)
- ext-xdebug: *
- friendsofphp/php-cs-fixer: ^3.89
- phpstan/phpstan: ^2.1
- phpunit/phpunit: ^13.1
Provides
This package is auto-updated.
Last update: 2026-05-12 10:56:44 UTC
README
Implementation of PSR-7 standard for representing HTTP messages as described in RFC 7230 and RFC 7231, and URIs for use with HTTP messages as described in RFC 3986.
Requirements
- PHP
>=8.5 - Composer
Installation
Install the package with Composer:
composer require thingston/psr7
Usage
Create a request
<?php use Thingston\Psr7\Request; $request = new Request( method: 'POST', uri: 'https://api.example.com/users?active=1', headers: [ 'Content-Type' => 'application/json', 'Accept' => 'application/json', ], ); $request = $request->withBody(new \Thingston\Psr7\Stream('{"name":"Ada"}')); echo $request->getMethod(); // POST echo $request->getRequestTarget(); // /users?active=1 echo $request->getHeaderLine('Host'); // api.example.com
Create a response
<?php use Thingston\Psr7\Response; use Thingston\Psr7\Stream; $response = new Response( statusCode: 201, headers: ['Content-Type' => 'application/json'], body: new Stream('{"created":true}') ); echo $response->getStatusCode(); // 201 echo $response->getReasonPhrase(); // Created
Work with URIs
<?php use Thingston\Psr7\Uri; $uri = (new Uri('https://example.com/base/path')) ->withQuery('page=2') ->withFragment('details'); echo (string) $uri; // https://example.com/base/path?page=2#details
Build a server request from PHP globals
<?php use Thingston\Psr7\ServerRequest; $request = ServerRequest::fromGlobals(); echo $request->getMethod(); echo (string) $request->getUri(); print_r($request->getQueryParams()); print_r($request->getUploadedFiles());
Uploaded files
<?php use Thingston\Psr7\UploadedFile; $file = new UploadedFile('/tmp/report.csv', 1234, UPLOAD_ERR_OK, 'report.csv', 'text/csv'); $file->moveTo(__DIR__ . '/storage/report.csv');
Notes
PSR-7 objects in this package are immutable. Methods such as withHeader(), withStatus(), withUri(), and withParsedBody() return a new instance instead of modifying the original object.