Ciao Raga, scrivo queste righe sperando che possano servire in futuro... Qui
spiegherò come utilizzare la compressione di files e le relative funzioni che
potranno essere utili... Esse riguardano soprattutto il filesistem, in quanto
le funzioni per comprimere possono essere tante. Allora Cominciamo...
PERCHE' COMPRIMERE??
Perchè così risparmiamo spazio... 
SI POSSONO CREARE ARCHIVI??
Ho fatto in modo di creare degli pseudo-archivi serializzando i dati. Quindi
essi non saranno visibili nei programmi per la gestione degli archivi.
QUANDO SI COMINCIA??
Ora...

Allora... Inizialmente analizziamo le funzioni principali per comprimere i
singoli files. Avevo creato una piccola classe, ed ora la analizzeremo insieme.
codice:
<?php
class gz_single {
/* Inizializza le variabili */
var $source;
var $dest;
var $level;
var $pointer;
var $gzdata;
var $data;
var $status;
function compress($source, $dest, $level)
{
/* Inizializza le variabili */
$this->source = $source;
$this->dest = $dest;
$this->level = $level;
/* Controlla che il file d'origine esista e che sia leggibile */
if(!is_file($this->source) OR !file_exists($this->source) OR !is_readable($this->source)) exit("Error 1: Source file doesn't exists or it's not readable!
");
/* Controlla che il file di destinazione non sia di sola lettura */
if(is_file($this->dest) AND !is_writeable($this->dest)) exit("Error 2: The destination file it's not writeable");
/* Arrotonda il livello di compressione */
$this->level = round($this->level);
/* Controlla il livello e se è troppo grande, lo porta al massimo */
if($this->level == 'MAX' OR $this->level > 9) $this->level = 9;
/* Controlla il livello e se è troppo piccolo, lo porta al minimo */
if($this->level == 'MIN' OR $this->level < 1) $this->level = 1;
/* Prende i dati dal file d'origine */
$this->data = file_get_contents($this->source);
/* Comprime i dati del file d'origine */
$this->gzdata = gzcompress($this->data, $this->level);
/* Scrive i dati compressi nel file di destinazione */
$this->status = file_put_contents($this->dest, $this->gzdata);
/* Ritorna i valori positivi e negativi in base all'esito dell'operazione */
if($this->status) return TRUE; else return FALSE;
}
function decompress($source, $dest)
{
/* Inizializza le variabili */
$this->source = $source;
$this->dest = $dest;
/* Controlla che il file d'origine esista e che sia leggibile */
if(!is_file($this->source) OR !file_exists($this->source) OR !is_readable($this->source)) exit("Error 1: Source file doesn't exists or it's not readable!
");
/* Controlla che il file di destinazione non sia di sola lettura */
if(is_file($this->dest) AND !is_writeable($this->dest)) exit("Error 2: The destination file it's not writeable");
/* Prende i dati dal file d'origine */
$this->gzdata = file_get_contents($this->source);
/* Comprime i dati del file d'origine */
$this->data = gzuncompress($this->gzdata);
/* Scrive i dati decompressi nel file di destinazione */
$this->status = file_put_contents($this->dest, $this->data);
/* Ritorna i valori positivi e negativi in base all'esito dell'operazione */
if($this->status) return TRUE; else return FALSE;
}
}
?>
Come vedete, ho creato solo due funzioni per questa classe, quelle fondamentali.
Analizziamo intanto la prima funzione, quella che comprime, poi passeremo
all'altra, che servirà a decomprimere il contenuto del file.
codice:
/* Controlla che il file d'origine esista e che sia leggibile */
if(!is_readable($this->source)) exit("Error 1: Source file doesn't exists or it's not readable!
");
/* Controlla che il file di destinazione non sia di sola lettura */
if(is_file($this->dest)) AND !is_writeable($this->dest)) exit("Error 2: The destination file isn't writeable");
Sono due controlli, il primo verifica che il file sorgente sia leggibile, con
la funzione is_readable() e la seconda, che sia scrivibile, con la funzione
is_writeable().
In caso di errore, interrompono lo script e stampano un messaggio di errore.
codice:
/* Arrotonda il livello di compressione */
$this->level = round($this->level);
/* Controlla il livello e se è troppo grande, lo porta al massimo */
if($this->level == 'MAX' OR $this->level > 9) $this->level = 9;
/* Controlla il livello e se è troppo piccolo, lo porta al minimo */
if($this->level == 'MIN' OR $this->level < 1) $this->level = 1;
Servono ad arrotondare il livello di compressione, ed a portarlo ad una cifra
accettabile.
round() serve ad arrotondare il numero.
I due controlli, servono invece per ridurre o aumentare il numero se è troppo
grande o troppo piccolo. Si possono utilizzare anche 'MIN' o 'MAX' per portarli
al minimo od al massimo.
codice:
/* Prende i dati dal file d'origine */
$this->data = file_get_contents($this->source);
File_Get_Contents() serve a leggere un file ed a memorizzare
il suo contenuto in una variabile, in questo caso $this->data.
codice:
/* Comprime i dati del file d'origine */
$this->gzdata = gzcompress($this->data, $this->level);
Questa è la vera funzione che esercita la compressione: gzcompress()
che comprime il file secondo il metodo COMPRESS. Gli argomenti sono: Il testo da
comprimere ed il livello di compressione.
codice:
/* Scrive i dati compressi nel file di destinazione */
$this->status = file_put_contents($this->dest, $this->gzdata);
/* Ritorna i valori positivi e negativi in base all'esito dell'operazione */
if($this->status) return TRUE; else return FALSE;
File_Put_Contents svolge invece il compito di scrivere nel file:
Gli argomenti sono: Il percorso del file ed il contenuto da scrivere, in questo
caso il contenuto compresso. Se il file non esiste, lo crea. Inoltre la funzione
ritorna TRUE o FALSE in base all'esito della scrittura nel file di destinazione.
Così abbiamo spiegato come si comprimo i files, opportunamente verificando la
sintassi usata per gli argomenti. Ora spiegherò come decomprimare i file
compressi con il metodo COMPRESS:
codice:
/* Controlla che il file d'origine esista e che sia leggibile */
if(!is_readable($this->source)) exit("Error 1: Source file doesn't exists or it's not readable!
");
/* Controlla che il file di destinazione non sia di sola lettura */
if(is_file($this->dest)) AND !is_writeable($this->dest)) exit("Error 2: The destination file it's not writeable");
Soliti controlli... Verifica che il file sorgente sia leggibile e che quello di
destinazione non sia di sola lettura (se esiste).
codice:
/* Prende i dati dal file d'origine */
$this->gzdata = file_get_contents($this->source);
Memorizza il contenuto del file in $this->gzdata
codice:
/* Comprime i dati del file d'origine */
$this->data = gzuncompress($this->gzdata);
Decomprime il file con la funzione gzuncompress(), che ha come unico argomento
il testo da decomprimere.
codice:
/* Scrive i dati decompressi nel file di destinazione */
$this->status = file_put_contents($this->dest, $this->data);
/* Ritorna i valori positivi e negativi in base all'esito dell'operazione */
if($this->status) return TRUE; else return FALSE;
Scrive i dati 'puliti' nel file di destinazione, e memorizza in $this->status
l'esito della scrittura.
Così abbiamo descritto come funziona la compressione/decompressone dei
files gz in formato COMPRESS.
To be continued...