una funzione per verificare l'invio di files

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
una funzione utile per verificare se i file che uno tenta di inviare tramite un form sono consentiti.
può verificare anche il contenuto dei file zip
PHP:
<?php
/*ATTENZIONE: valido per PHP 5 >= 5.2.0, PHP 7, PECL zip >= 1.5.0*/
/*
la funzione può servire anche per verificare il contenuto di un file .zip, con alcune limitazioni esempio
i files dentro lo zip non devono essere contenuti in una cartella, se contenuti risponde FALSE
anche se i file fossero tra quelli ammessi
poi sarebbe opprtuno non solo verificare l'estenzione dei file,
ma anche il tipo che viene riportato da $_FILE['xyz']['type']
*/
function verifica_file($file='',$fa='',$ms=0){
    //verifica impostazioni funzione
    if($file=='' || !is_array($file) || $fa=='' || !is_array($fa) || $ms==0 || $ms==NULL){
        return FALSE;
    }
    $nome_file=$file['name'];
    $nome_file_tmp=$file['tmp_name'];
    $grandezza_file=$file['size'];
    $errore=(int)$file['error'];
    if($errore!==0){return FALSE;}
    if($grandezza_file > $ms){return FALSE;}
    $est=strtolower(pathinfo($nome_file, PATHINFO_EXTENSION));
    if(!in_array($est,$fa)){return FALSE;}
    if($est!='zip'){//il file non è uno zip ed è tra gli ammessi
        return TRUE;
    }else{//il file è uno zip e quindi controllo il contenuto
        //tolgo l'estenzione zip da ammessi
        //in modo che lo zip non possa contenere a sua volta uno zip
        for($k=0; $k<count($fa);$k++){
            if($fa[$k]=='zip'){ unset($fa[$k]);}
        }
        //chiamo la classe zip
        $zip = new ZipArchive();
        //carico il file .zip nella cartella temporanea
        $cart=pathinfo($nome_file_tmp,PATHINFO_DIRNAME);//cartella del temporaneo
        $da_aprire=$cart."/$nome_file";
        if(!move_uploaded_file($nome_file_tmp, $da_aprire)){return FALSE;}//sposto lo zip in cartella temporanea
        if ($zip->open($da_aprire)!==TRUE){return FALSE;}
        //e lo esploro
        for ($j=0; $j<$zip->numFiles;$j++){
            $stat = $zip->statIndex( $j );
            $in_zip = $stat['name'];
            $tipo=strtolower(pathinfo($in_zip, PATHINFO_EXTENSION));
            if(!in_array($tipo,$fa)){
                //unset($da_aprire);//forse conviene eliminarlo subito
                return FALSE;
            }
        }
    }
    return TRUE;
}
/*---per test------------*/
if(isset($_POST['invia'])){
    $ammessi=array('jpg','gif','png','zip');
    $max_size=1000000;   
    if(verifica_file($_FILES['file'],$ammessi,$max_size)){
        echo "<p style=\"color: #0F0; \">file consentito</p>";//ecc...allego all'email
    }else{
        echo "<p style=\"color: #F00; \">file <b>NON</b> consentito</p>";//ecc...rimando dove voglio
    }
    
}
?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" enctype="multipart/form-data">
<input name="file" type="file" /><br />
<input name="invia" type="submit" value="invia" />
</form>

p.s.
se qualcuno ne ha voglia la trasformi in una classe e la posti e/o la migliori
 
Discussioni simili
Autore Titolo Forum Risposte Data
C Creazione di una funzione per il filtraggio dei campi di un db Presentati al Forum 0
G Funzione che resta in ascolto per una chiamata esterna Javascript 1
B Funzione per ottenere una determinata stringa PHP 4
E ordinamento array multidimensionale per un valore ottenuto tramite una funzione PHP 1
Monital Modificare una funzione per creazione tabella html PHP 15
SolidSnake4 funzione mkdir per creare una directory PHP 1
C lanciare una funzione javascript e attenderne la fine per lanciarne una seconda Javascript 1
R Variabile non risconosciuta dentro una funzione PHP 1
F Funzione Glob - ricerca file contenente una parola PHP 1
Domenico_Falco1 Associare una stessa funzione get a due eventi a.click con classi differenti Ajax 6
maxnegri [PHP]Funzione di calcolo prezzo di una camera in un range di date PHP 62
L [PHP] problema count messo in una funzione. PHP 1
R [Javascript] Rendere una funzione sempre visibile Javascript 2
C richiamare una funzione in un altro script php PHP 1
P [Javascript] Inserire una nuova condizione in una funzione Javascript 3
C [Javascript] Chiamata di una funzione da *.js esterno Javascript 1
J [Javascript] una funzione ricorsiva che non capisco come lavori Javascript 6
G [Javascript] nome da dare ad una funzione Javascript 1
ken_korn [Javascript] Portare variabile in una funzione esterna al suo scope Javascript 2
P [Javascript] eseguire una funzione dopo un'altra Javascript 0
M [PHP] Errore nell' assegnazione della variabile $this->id su una funzione PHP 1
A utilizzare array di una funzione in un'altra jQuery 1
S PHP: inviare via email contenuto di una funzione PHP 4
A Chiamare una specifica funzione in una pagina php PHP 1
gandalf1959 richiamare una funzione da un'altra funzione PHP 1
gandalf1959 richiamare una funzione: funziona solo la seconda volta... PHP 7
F Aggiornare marker su mappa google con una funzione ajax richiamata al cambio di una select Ajax 2
A chiamata di una funzione esterna rispetto al file js chiamante jQuery 3
D PHP:funzione che opera una query su argomento PHP 8
JackIlPazzo Chiamare una funzione specifica di php da una richiesta ajax? PHP 2
Monital Invio email con dati di una funzione JS PHP 1
gandalf1959 Chiedere conferma all'utente prima di eseguire una funzione PHP 5
M Far partire una funzione/codice php con javascript Javascript 1
U Far partire una funzione JavaScript premendo bottone in html Javascript 13
M Passare una funzione a una proprietà di oggetto Javascript 2
F Dubbio su una funzione personalizzata PHP 3
L assegnare funzione solo ad una pagina PHP 1
D Scaricare database MYSql con una funzione MySQL 0
M Lanciare una funzione asp.net con javascript. E' possibile? ASP.NET 0
ivarello Togliere una Funzione jQuery 4
F Trasporto variabile da una funzione all'altra Javascript 3
D Stampare variabile da una funzione PHP 1
L problema nella implementare una funzione con ritorno PHP 2
F Problema tabs al richiamo di una funzione jQuery 1
P Passare un valore, o arriare una funzione da pagina2.php in pagina1.php Javascript 2
S Riportare risultato di una funzione nello script. PHP 2
B AIUTO: come passare una variabile php ad una funzione javascript Javascript 2
I Spostare codice js inline in una funzione js con l'aiuto del dom Javascript 1
S [jQuery] far ripetere una funzione jQuery 2
M Verifica se una Funzione appartiene ad una Classe PHP 9

Discussioni simili