This extension allows Brotli compression.
Documentation for Brotli can be found at » https://github.com/google/brotli/.
% git clone --recursive --depth=1 https://github.com/kjdev/php-ext-brotli.git
% cd php-ext-brotli
% phpize
% ./configure
% make
$ make install
To use the system library (using pkg-config)
% ./configure --with-libbrotliRPM packages of this extension are available in » Remi's RPM repository and are named php-brotli.
php.ini:
extension=brotli.so
| Name | Default | Changeable | 
|---|---|---|
| brotli.output_compression | 0 | PHP_INI_ALL | 
| brotli.output_compression_level | 11 | PHP_INI_ALL | 
| brotli.output_compression_dict | "" | PHP_INI_ALL | 
- 
brotli.output_compression boolean Whether to transparently compress pages. If this option is set to "On" in php.ini or the Apache configuration, pages are compressed if the browser sends an "Accept-Encoding: br" header. "Content-Encoding: br" and "Vary: Accept-Encoding" headers are added to the output. In runtime, it can be set only before sending any output. 
- 
brotli.output_compression_level integer Compression level used for transparent output compression. Specify a value between 0 to 11. The default value of BROTLI_COMPRESS_LEVEL_DEFAULT(11).
- 
brotli.output_compression_dict string Specifies the path to the compressed dictionary file to be used by the output handler. can be used when BROTLI_DICTIONARY_SUPPORTis enabled
| Name | Description | 
|---|---|
| BROTLI_GENERIC | Generic compress mode value | 
| BROTLI_TEXT | Text compress mode value | 
| BROTLI_FONT | Font compress mode value | 
| BROTLI_COMPRESS_LEVEL_MIN | Minimal compress level value | 
| BROTLI_COMPRESS_LEVEL_MAX | Maximal compress level value | 
| BROTLI_COMPRESS_LEVEL_DEFAULT | Default compress level value | 
| BROTLI_PROCESS | Incremental process mode value | 
| BROTLI_FLUSH | Incremental produce mode value | 
| BROTLI_FINISH | Incremental finalize mode value | 
| BROTLI_DICTIONARY_SUPPORT | Dictionary support value | 
BROTLI_DICTIONARY_SUPPORTmust be enabled with brotli library version 1.1.0 or higherdictionary only work from compression level 5 or higher note
- brotli_compress — Compress a string
- brotli_uncompress — Uncompress a compressed string
- brotli_compress_init — Initialize an incremental compress context
- brotli_compress_add — Incrementally compress data
- brotli_uncompress_init — Initialize an incremental uncompress context
- brotli_uncompress_add — Incrementally uncompress data
brotli_compress ( string $data, int $level = BROTLI_COMPRESS_LEVEL_DEFAULT, int $mode = BROTLI_GENERIC, string|null $dict = null ): string|falseThis function compress a string.
- 
data The data to compress. 
- 
level The higher the level, the slower the compression. (Defaults to BROTLI_COMPRESS_LEVEL_DEFAULT)
- 
mode The compression mode can be BROTLI_GENERIC(default),BROTLI_TEXT(for UTF-8 format text input) orBROTLI_FONT(for WOFF 2.0).
- 
dict The dictionary data. can be used when BROTLI_DICTIONARY_SUPPORTis enabled
The compressed string or FALSE if an error occurred.
brotli_uncompress ( string $data, string|null $dict = null ): string|falseThis function uncompress a compressed string.
- 
data The data compressed by brotli_compress(). 
- 
dict The dictionary data. can be used when BROTLI_DICTIONARY_SUPPORTis enabled
The original uncompressed data or FALSE on error.
brotli_compress_init ( int $level = BROTLI_COMPRESS_LEVEL_DEFAULT, int $mode = BROTLI_GENERIC, string|null $dict = null ): Brotli\Compress\Context|falseInitialize an incremental compress context.
- 
level The higher the level, the slower the compression. (Defaults to BROTLI_COMPRESS_LEVEL_DEFAULT)
- 
mode The compression mode can be BROTLI_GENERIC(default),BROTLI_TEXT(for UTF-8 format text input) orBROTLI_FONT(for WOFF 2.0).
- 
dict The dictionary data. can be used when BROTLI_DICTIONARY_SUPPORTis enabled
Returns a Brotli\Compress\Context instance on success,
or FALSE on failure.
brotli_compress_add ( Brotli\Compress\Context $context, string $data, $mode = BROTLI\_FLUSH ): string|falseIncrementally compress data.
- 
context A context created with brotli_compress_init().
- 
data A chunk of data to compress. 
- 
mode One of BROTLI_FLUSH(default) andBROTLI_PROCESS,BROTLI_FINISH.BROTLI_FINISHto terminate with the last chunk of data.
Returns a chunk of compressed data, or FALSE on failure.
brotli_uncompress_init ( string|null $dict = null ): Brotli\UnCompress\Context|falseInitialize an incremental uncompress context.
- 
dict The dictionary data. can be used when BROTLI_DICTIONARY_SUPPORTis enabled
Returns a Brotli\UnCompress\Context instance on success,
or FALSE on failure.
brotli_uncompress_add ( Brotli\UnCompress\Context $context, string $data, $mode = BROTLI\_FLUSH ): string|falseIncrementally uncompress data.
- 
context A context created with brotli_uncompress_init().
- 
data A chunk of compressed data. 
- 
mode One of BROTLI_FLUSH(default) andBROTLI_PROCESS,BROTLI_FINISH.BROTLI_FINISHto terminate with the last chunk of data.
Returns a chunk of uncompressed data, or FALSE on failure.
Namespace Brotli;
function compress( string $data, int $level = \BROTLI_COMPRESS_LEVEL_DEFAULT, int $mode = \BROTLI_GENERIC, string|null $dict = null ): string|false {}
function uncompress( string $data, string|null $dict = null ): string|false {}
function compress_init( int $level = \BROTLI_COMPRESS_LEVEL_DEFAULT, int $mode = \BROTLI_GENERIC, string|null $dict = null ): \Brotli\Compress\Context|false {}
function compress_add( \Brotli\Compress\Context $context, string $data, $mode = \BROTLI_FLUSH ): string|false {}
function uncompress_init(string|null $dict = null): \Brotli\UnCompress\Context|false {}
function uncompress_add( \Brotli\UnCompress\Context $context, string $data, int $mode = \BROTLI_FLUSH ): string|false {}alias functions..
Brotli compression and uncompression are available using the
compress.brotli:// stream prefix.
$compressed = brotli_compress('Compresstest');
$uncompressed = brotli_uncompress($compressed);
echo $uncompressed;ini_set('brotli.output_compression', 'On');
// OR
// ob_start('ob_brotli_handler');
echo ...;"Accept-Encoding: br" must be specified.
$data = \Brotli\compress('test');
\Brotli\uncompress($data);file_put_contents("compress.brotli:///path/to/data.br", $data);
readfile("compress.brotli:///path/to/data.br");// compression
$resource = brotli_compress_init();
$compressed = '';
$compressed .= brotli_compress_add($resource, 'Hello, ', BROTLI_FLUSH);
$compressed .= brotli_compress_add($resource, 'World!', BROTLI_FLUSH);
$compressed .= brotli_compress_add($resource, '', BROTLI_FINISH);
echo brotli_uncompress($compressed), PHP_EOL; // Hello, World!
// uncompression
$resource = brotli_uncompress_init();
$uncompressed = '';
$uncompressed .= brotli_uncompress_add($resource, substr($compressed, 0, 5), BROTLI_FLUSH);
$uncompressed .= brotli_uncompress_add($resource, substr($compressed, 5), BROTLI_FLUSH);
$uncompressed .= brotli_uncompress_add($resource, '', BROTLI_FINISH);
echo $uncompressed, PHP_EOL; // Hello, World!$data = '..';
// load dictionary data
$dict = file_get_contents('data.dict');
// basic
$compressed = brotli_compress(data: $data, dict: $dict);
$uncompressed = brotli_uncompress(data: $compressed, dict: $dict);
// incrementally
$context = brotli_compress_init(dict: $dict);
$compressed = '';
$compressed .= brotli_compress_add($context, $data);
$compressed .= brotli_compress_add($context, '', BROTLI_FINISH);
$context = brotli_uncompress_init(dict: $dict);
$uncompressed = '';
$uncompressed .= brotli_uncompress_add($context, $compressed, BROTLI_FLUSH);
$uncompressed .= brotli_uncompress_add($context, '', BROTLI_FINISH);
// streams
$ctx = stream_context_create([
    'brotli' => [
        'dict' => $dict,
    ],
]);
file_put_contents('compress.brotli:///path/to/data.br', $data, 0, $ctx);
$uncompressed = file_get_contents('compress.brotli:///path/to/data.br', false, $ctx);
// output handler
ini_set('brotli.output_compression_dict', __DIR__ . '/data.dict');
ini_set('brotli.output_compression', 'On');
// OR: ob_start('ob_brotli_handler');
echo ...;Experimental: Compression Dictionary Transport support
must be specified headers.
Accept-Encoding: dcb
Available-Dictionary: :<base64-hash>: