In the hopes this will help others - a hard to spot gotcha when implementing zlib.output_compression. if you use flush() anywhere in your script (even right at the end) the compression won't work - you need to let that happen automatically or it ends up being sent uncompressed.
Configurazione di Runtime
Il comportamento di queste funzioni è influenzato dalle impostazioni di php.ini.
L'estensione zlib permette di comprimere in modo trasparente le pagine on-the-fly, se il browser supporta questa funzionalità. Quindi ci sono due opzioni nel file di configurazione php.ini.
| Nome | Default | Configurabile in |
|---|---|---|
| zlib.output_compression | "Off" | PHP_INI_ALL |
| zlib.output_compression_level | "-1" | PHP_INI_ALL |
| zlib.output_handler | "" | PHP_INI_ALL |
Breve descrizione dei parametri di configurazione.
-
zlib.output_compressionboolean/integer -
Decide se comprimere le agine in maniera trasparente. Se questa opzione è impostata a "On" in php.ini o nella configurazione di Apache, le pagine vengono compresse se il browser invia un header "Accept-Encoding: gzip" o "deflate". Gli header "Content-Encoding: gzip" (oppure "deflate") e "Vary: Accept-Encoding" sono aggiunti all'output.
Questa opzione accetta anche valori interi oltre ai booleani "On"/"Off", in questo modo è possibile impostare la dimensione del buffer (il default è 4KB).
Nota:
output_handler deve essere vuoto se quest opzione è 'On' ! Altrimenti occorre utilizzare zlib.output_handler.
-
zlib.output_compression_levelinteger -
Livello di compressione utilizzato per la compressione trasparente dell'output.
-
zlib.output_handlerstring -
Non si possino specificare ulteriori handler dell'output se zlib.output_compression è attivo. Questa impostazione è come output_handler ma con un ordine differente.
Apparently, there is a bug in certain versions of PHP with setting zlib.output_compression to "On" via ini_set:
<?php
ini_set("zlib.output_compression", "On");
?>
In some cases, it does not send the Content-type header and browsers won't know to decompress the contents before displaying. Instead, you can set it to the buffer size, which sends the correct header:
<?php
ini_set("zlib.output_compression", 4096);
?>
