una funzione per verificare l'invio di files

Discussione in 'Snippet PHP' iniziata da borgo italia, 12 Marzo 2017.

  1. borgo italia

    borgo italia Super Moderatore Membro dello Staff SUPER MOD MOD

    Registrato:
    4 Febbraio 2008
    Messaggi:
    15.694
    Mi Piace Ricevuti:
    126
    Punteggio:
    63
    Sesso:
    Maschio
    Località:
    PR
    Home Page:
    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==|| $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_filePATHINFO_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_zipPATHINFO_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
     
Sto caricando...

Condividi questa Pagina