Compressione gzip senza il modulo apache mod_gzip

LA maggior parte dei servizi di shared hosting offrono la compressione gzip di default, come per esempio dreamhost dove al massimo è da disattivare non da attivare. Invece con lunarpages (che per la cronaca anche se non centra nulla ieri un attacco DoS lo ha fatto andare interamente down per un oretta) con il servizio base di shared hosting non consente di attivare il modulo di apache mod_gzip.

C’è un modo forse un po macchinoso ma comunque funzionale per ovviare a questo. Essendo che utilizzano suPHP è possibile tra le altre cose personalizzare il file di configuarazione php.ini per ogni cartella sul server. Ciò consente di abilitare zlib.output_compression ovvero l’estensione di PHP che a runtime “on-th-fly” al volo come recita il manule di php comprime l’html risultante da una pagina php prima di inviarlo ai browser. Per attivarlo quindi basta creare un file php.ini e scriverci:

zlib.output_compression = On
zlib.output_compression_level = 6

Per poter comprimere tutti i documenti, dai fogli di stile ai javascript, e non solo gli script php basta far processare a PHP tutti i file che vogliamo comprimere, pertanto andremo a scrivere nel file .htaccess

AddHandler application/x-httpd-php5 .css .html .js
suPHP_ConfigPath /home/username/public_html/

La direttiva AddHandler serve a far processare a PHP tutti i file con estensione .css, .html e .js potete aggiungere ogni estensione che vi pare, la seconda riga invece serve per specificare il percorso del file di configurazione php.ini, al posto di username va ovviamente il vostro username e dopo public_html potete specificare qualsiasi percorso dove sia presente un file php.ini.

Ora tutti i file prima di essere visualizzati verranno compressi, questo però può comportare dei grossi problemi, l’header di risposta per esempio di un foglio di stile potrebbe non essere più lo stesso, pertanto bisogna ristabilire gli header giusti. Un modo molto semplice è includere prima di ogni file questo script.

<?php
$path = pathinfo($_SERVER['SCRIPT_NAME']);
 if ($path['extension'] == 'css')  {
 header('Content-type: text/css');
}
if ($path['extension'] == 'js')  {
 header('Content-type: application/x-javascript');
}
?>

per farlo bisogna salvare questo script in un file denominato per esempio pre.php e aggiungere al file php.ini questa riga:

auto_prepend_file = "/home/username/public_html/pre.php"

Così ora i file con estensione .js, .css e .html prima verranno processati da php quindi compressi poi gli sarà restituito il giusto header e infine inviati al browser. Attenzione che se avete dell’xml all’interno di questi file tra i tag <?xml ... ?> verrà processato da php, per ovviare a questo basta aggiungere a php.ini il comando:

short_open_tag = 0

questo disabilita gli short tag <? ... ?> per php quindi come è giusto che sia tutto il codice php va messo assolutamente all’interno dei tag <?php ... ?>

6 thoughts on “Compressione gzip senza il modulo apache mod_gzip

  1. ciao Gianluca bel articolo interessante,io sto su un hosting che è top host il quale non prevede il mod-gzip e ho provato a seguire questa guida facendo il file php.ini nella root del server poi facendolo riconoscere al file,.htaccess..ed il resto uso joomla..solo che quando faccio per visualizzare la home page mi da l’errore 500 dicendo che nel file.htacces c’è un errore…cosa potrebbe essere?grazie per la disponibilità

    • ciao Giorgio mi dispiace ma con top host non credo sia in alcun modo possibile attivare la compressione GZIP e tanto meno con il metodo che spiegato io, specifico per Lunarpages. Credo che tophost non accetti neanche il file di configurazione php.ini

  2. infatti ho notato che purtrppo tophost ha molte limitazioni oltre che pergzip anche per tagheader,etag..i file php ini ci sono nelle cartelle server ma non so perchè non funge la guida restituendo l’errore 500..insomma credo proprio che dovro cambiare host..sai consigliarmi un host che accetti questi moduli ma che non costi 50€ l’anno come aruba?ti ringrazio per il fastidio

  3. Ciao, stavo cercando un metodo per attivare la compressione zlib e ho trovato il tuo articolo, la procedura funziona benissimo e ho risolto il mio problema, grazie mille.
    Già che c’ero ho preso spunto e ho scritto un articolo sul mio sito con link al tuo, spero non ti dispiaccia.
    (Se ci dovessero essere problemi fammelo sapere :-D )
    Ciao
    Enea

Leave a Reply to gianluca Cancel reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>