Codice PHP:
<?php
#########################################################################
##### #####
## FilePusher versione 0.1; creato da KLaN ([url]http://luriodmp3.cjb.net[/url]) ##
#### questa libreria è rilasciata sotto licensa GNU/GPL ####
##### #####
#########################################################################
class filePush
{
########################### INIZIO PARTE CONFIGURABILE ###############################
#
#
################## INIZIO PARTE RICHIESTA
#
#
var $upDIR = "/www.overfourteen.altervista.org/upload"; //$upDIR deve corrispondere all path assoluto
//della directory dove intendi caricare i file
var $eMail = "overfourteen@gmail.com"; //Il tuo indirizzo E-Mail; FilePusher lo userà per
//notificarti errori e caricamenti avvenuti
//(Attenzione: FilePusher non notifica tentativi di
//hacking o file non validi)
#
#
################## FINE PARTE RICHIESTA
#
#
#
var $maxFileSize = ""; //questa opzione ti permette di limitare la dimensione di ogni
//singolo file; la dimensione va espressa in bytes
var $disabled_Exts = ".php,.php3,.php4,.htaccess"; //questa opzione ti permette di
//impedire che vengano caricati file con
//determinate estensioni; le estensioni
//vanno separate con una virgola
var $select_uploads = true; //questa opzione ,quando impostata su true, permette
//all'utente di scegliere quanti file caricare
var $max_uploads = 7; //il numero massimo di upload che possono essere effettuati
var $default_uploads = 1; //questa opzione corrisponde al numero di file-field che vengono
//mostrati di default
var $compress = ""; //questa opzione ti permette di comprimere i fie una volta caricati
//usando GZip o Bzip; il valore può essere "gz" oppure "bz"; per
//utilizzare questa opzione hai bisogno dei permessi di scrittura
//(chmod 777) e delle librerie GZIP o BZIP2; sconsiglio di usarla su
//piattaforme Windows perchè Windows è una ***** (potrebbe crasharsi o
//corrompere il file)
#
#
#
########################### FINE PARTE CONFIGURABILE #################################
var $target;
var $logs = array(); //in questo array verrano inserite informazioni sui file caricati in
//questo modo (nome del file, stato [caricato o non caricato; array
//$bools], messaggio [array $responses])
var $bools = array(
0 => "caricato",
1 => "non caricato"
);
var $responses = array();
var $compressions = array( //Metodi compressione supportati
"gz" => "gzencode",
"bz" => "bzcompress"
);
# Questa funzione inserisce gli elementi nell'array $resonses in base alla configurazione
function makeResponses(){
$this->responses[0] = "ok!";
$this->responses[1] = "file non valido";
$this->responses[2] = "dimensione del file nulla";
$this->responses[3] = "supera la dimensione massima consentita ($this->maxFileSize bytes)";
$this->responses[4] = "formato del file non valido (i file con estensione $this->disabled_Exts non sono accettati)";
$this->responses[5] = "errore durante il caricamento";
}
# Questa funzione verifica la validità del file; ritorna vero o falso
function checkFileType($file, $fileName, $fileSize){
$ok = true;
if(!is_uploaded_file($file)){ //controlla che il file sia stato
array_push($this->logs, $this->bools[1]); //correttamente caricato via
array_push($this->logs, $this->responses[1]); //HTTP POST
$ok = false;
}
elseif($fileSize <= 0){ //controlla che il file non abbia
array_push($this->logs, $this->bools[1]); //dimensione nulla
array_push($this->logs, $this->responses[2]);
$ok = false;
}
elseif($this->maxFileSize && ($fileSize > $this->maxFileSize)){ //se è impostata
array_push($this->logs, $this->bools[1]); //una dimensione
array_push($this->logs, $this->responses[3]); //massima, controlla
$ok = false; //che il file non la superi
}
elseif($this->disabled_Exts){ //verifica se il formato del
$noEXTs = explode(",", $this->disabled_Exts); //file è tra quelli non
foreach($noEXTs as $noExt){ //accettati
trim($noExt);
($noExt == "") && next();
if(stristr(substr($fileName, strrpos($fileName, ".")), $noExt)){
array_push($this->logs, $this->bools[1]);
array_push($this->logs, $this->responses[4]);
$ok = false;
}
}
}
return($ok);
}
# Questa funzione restituisce la destinazione del file
function checkTarget($fileName){
$fileName = str_replace(" ", "_", $fileName); //rimpiazza gli spazi vuoti con un _
if($this->compress && $this->checkZLIB()){ //se abilitata l'opzione di
$fileName .= ".".$this->compress; //compressione, aggiunge l'estensione del
} //tipo di compressione
$this->target = $this->upDIR."/".$fileName;
$rename = 1;
while(file_exists($this->target)){ //evita la sovrascrittura
$theExt = substr($fileName, strrpos($fileName, ".")); //dei file aggiungendo .1,
$theName = substr($fileName, 0, strrpos($fileName, ".")); //.2 .3 e così via
if(preg_match("/.\.[0-9]/",$theName)){
$theName = substr($theName, 0, strrpos($theName, "."));
}
$this->target = $this->upDIR."/".$theName.".".$rename.$theExt;
$rename++;
}
}
# Questa funzione verifica che ci sia la libreria per il tipo di compressione scelto
function checkZLIB(){
$function = $this->compressions[$this->compress];
if(@function_exists($function)){
return true;
} else{
return false;
}
}
# Questa funzione comprime i file caricati in base al tipo di compressione scelto,
# ritorna true se è riuscito a comprimerlo.
function useZLIB($tmp){
$fp = fopen($tmp, "rb");
$contents = fread($fp, filesize($tmp));
fclose($fp);
$zfp = fopen($this->target, "w");
eval('fputs($zfp, '.$this->compressions[$this->compress].'($contents));');
fclose($zfp);
unlink($tmp);
if(file_exists($this->target) && filesize($this->target) > 0){
return true;
} else{
return false;
}
}
# Qui inizia la storia
function initFilePush($file, $fileName, $fileSize){
$this->makeResponses(); //completa l'array $responses
array_push($this->logs, $fileName); //inserisce il nome file nell'array $logs
$control = $this->checkFileType($file, $fileName, $fileSize); //controlla il file
if($control){ //se il file non gli va bene, chiude qui
$this->checkTarget($fileName); //crea la destinazione per il file
if($this->compress && $this->checkZLIB()){ //se è impostata l'opzione di
$tmp = $this->target.".tmp"; //compressione, muove il file in uno
$move = @move_uploaded_file($file, $tmp); //temporaneo e lo comprime;
$move && ($push = @$this->useZLIB($tmp)); //altrimenti
} else{ //muove il file caricato e chiude qui
$push = @move_uploaded_file($file, $this->target); // <------------'
}
$adesso = '[ In data '.date("d-m-Y").' alle '.date("H:i").' ]';
if($push){ //se l'operazione è andata a buon fine,
array_push($this->logs, $this->bools[0]); //chiude l'array $logs e notifica
array_push($this->logs, $this->responses[0]); //l'upload via mail
@mail($this->eMail, "FilePusher: notifica upload", "E' stato caricato un nuovo file.\n\n\tNome originale: ".$fileName."\n\tDestinazione: ".$this->target."\n\n".$adesso);
} else{
array_push($this->logs, $this->bools[1]); //se è andata male notifica
array_push($this->logs, $this->responses[5]); //l'errore via mail
@mail($this->eMail, "FilePusher: notifica errore", "E' avvenuto un errore durante il caricamento di un file.\n\n\tNome del file: ".$fileName."\n\n".$adesso);
}
}
}
}
?>