Ecco qui una bella supposta per le GZ
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... :stordita:
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.
Come vedete, ho creato solo due funzioni per questa classe, quelle fondamentali.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; } } ?>
Analizziamo intanto la prima funzione, quella che comprime, poi passeremo
all'altra, che servirà a decomprimere il contenuto del file.
Sono due controlli, il primo verifica che il file sorgente sia leggibile, conCodice:/* 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");
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.
Servono ad arrotondare il livello di compressione, ed a portarlo ad una cifraCodice:/* 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;
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.
File_Get_Contents() serve a leggere un file ed a memorizzareCodice:/* Prende i dati dal file d'origine */ $this->data = file_get_contents($this->source);
il suo contenuto in una variabile, in questo caso $this->data.
Questa è la vera funzione che esercita la compressione: gzcompress()Codice:/* Comprime i dati del file d'origine */ $this->gzdata = gzcompress($this->data, $this->level);
che comprime il file secondo il metodo COMPRESS. Gli argomenti sono: Il testo da
comprimere ed il livello di compressione.
File_Put_Contents svolge invece il compito di scrivere nel file: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;
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:
Soliti controlli... Verifica che il file sorgente sia leggibile e che quello diCodice:/* 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");
destinazione non sia di sola lettura (se esiste).
Memorizza il contenuto del file in $this->gzdataCodice:/* Prende i dati dal file d'origine */ $this->gzdata = file_get_contents($this->source);
Decomprime il file con la funzione gzuncompress(), che ha come unico argomentoCodice:/* Comprime i dati del file d'origine */ $this->data = gzuncompress($this->gzdata);
il testo da decomprimere.
Scrive i dati 'puliti' nel file di destinazione, e memorizza in $this->statusCodice:/* 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;
l'esito della scrittura.
Così abbiamo descritto come funziona la compressione/decompressone dei
files gz in formato COMPRESS.
To be continued... :zizi:

LinkBack URL
About LinkBacks
Rispondi Citando
