middlewares / encoder
Middleware to encode the response body to gzip or deflate
Installs: 57 152
Dependents: 4
Suggesters: 0
Security: 0
Stars: 6
Watchers: 2
Forks: 2
Open Issues: 2
Requires
- php: ^7.2 || ^8.0
- ext-zlib: *
- middlewares/utils: ^3.0
- psr/http-server-middleware: ^1.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2.0
- laminas/laminas-diactoros: ^2.2
- oscarotero/php-cs-fixer-config: ^1.0
- phpstan/phpstan: ^0.12
- phpunit/phpunit: ^8|^9
- squizlabs/php_codesniffer: ^3.0
README
Middleware to encode the response body to gzip
or deflate
if the Accept-Encoding
header is present and adds the Content-Encoding
header. This package is splitted into the following components:
You can use the component ContentEncoding
in the middlewares/negotiation to negotiate the encoding to use.
Requirements
- PHP >= 7.2
- A PSR-7 http library
- A PSR-15 middleware dispatcher
Installation
This package is installable and autoloadable via Composer as middlewares/encoder.
composer require middlewares/encoder
GzipEncoder
Compress the response body to GZIP format using gzencode and add the header Content-Encoding: gzip
.
Note: The response body is encoded only if the header contains the value gzip
in the header Accept-Encoding
.
Dispatcher::run([ new Middlewares\GzipEncoder(), ]);
Optionally, you can provide a Psr\Http\Message\StreamFactoryInterface
that will be used to create the response body. If it's not defined, Middleware\Utils\Factory will be used to detect it automatically.
$streamFactory = new MyOwnStreamFactory(); $encoder = new Middlewares\GzipEncoder($streamFactory);
DeflateEncoder
Compress the response body to Deflate format using gzdeflate and add the header Content-Encoding: deflate
.
Note: The response body is encoded only if the header contains the value deflate
in the header Accept-Encoding
.
Dispatcher::run([ new Middlewares\DeflateEncoder(), ]);
Optionally, you can provide a Psr\Http\Message\StreamFactoryInterface
that will be used to create the response body. If it's not defined, Middleware\Utils\Factory will be used to detect it automatically.
$streamFactory = new MyOwnStreamFactory(); $encoder = new Middlewares\DeflateEncoder($streamFactory);
Common Options
contentType
This option allows the overring of the default patterns used to detect what resources are already compressed.
The default pattern detects the following mime types text/*
, application/json
, image/svg+xml
and empty content types as compressible. If the pattern begins with a forward slash /
it is tested as a regular expression, otherwise its is case-insensitive string comparison.
Dispatcher::run([ (new Middlewares\DeflateEncoder()) ->contentType( '/^application\/pdf$/', // Regular Expression 'text/csv' // Text Pattern ) ]);
Please see CHANGELOG for more information about recent changes and CONTRIBUTING for contributing details.
The MIT License (MIT). Please see LICENSE for more information.