Uploadeur de fichiers multiples v1

Description

UPLOADEUR DE FICHIERS MULTIPLES

- choix des extensions dans un tableau
- contrôle des erreurs
- extensible, ajout de 'file' dans le formulaire par la variable $j
- quelques contrôles de sécurité et nettoyage
- adaptable à differents projets
- creation auto du repertoire upload
- ideal pour le téléchargement d'images vers une galerie

Source / Exemple :

<?php
$rep = 'upload';/* vous decider */
if (@file_exists($rep)){
}else{
@mkdir($rep, 0705);
}

/*reglages persos*/
$j=5; /*indiquer ici le nombre de input file, faut pas exagerer les copains ...*/
$size_max=250000; /*taille maxi du fichier*/
$extensions = array('.png', '.gif', '.jpg', '.jpeg'); /*ici des images*/
/*attention repercuter la liste dans le controle mine plus bas*/

if(isset($_FILES['ufile'])){
$c=count($_FILES['ufile']);
}else{
$c=0;
}


if(isset($_GET['del']) && !empty($_GET['del'])){

$file=(string)$_GET['del'];
    
    if (@file_exists($rep.'/'.$file)){
        
        @unlink($rep.'/'.$file);
        $file=NULL;
        unset($_GET);
        
    }else{
    }

}else{
}


if(isset($_POST['Sub']) && $_SERVER['REQUEST_METHOD']==="POST" ){

echo '<div align="center"><pre>';

    
    echo '<a href="'.$_SERVER['PHP_SELF'].'">RETOUR AU FORMULAIRE</a><br />';
    
    
    foreach($_FILES as $k => $v) {
           
           $ti = 0 ;
           
           while($ti<$j) {
           
           $erreur="";
           
           echo '<hr><font color="red"><h3>'.$ti.'</h3></font><br />';
           
           if(empty($v['name'][$ti])){
           $erreur .= ' VIDE <br />';
           }else{
           
           }
                              
           
           if(strlen($v['name'][$ti]) > 64 ){
           $erreur .= ' Le nom est trop long <br />';
           }else{
           }
           
           
          /*nettoyage nom*/
                  
          
          $v['name'][$ti] = strtr($v['name'][$ti],
          'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ',
          'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
          
          $v['name'][$ti]=strtolower($v['name'][$ti]); /* .JPG -> .jpg ...*/
                         
          
          $v['name'][$ti] = preg_replace('/([^.a-z0-9]+)/i', '-', $v['name'][$ti]);
          
          /*CES LIGNES SI ON VEUT UN FICHIER UNIQUE A CHAQUE UPLOAD*/
          /*JOUR - MOIS - ANNEE - HEURE - MINUTE - id - NOM*/
          
          $dateur = date('m-d-Y-H-i-').uniqid();  /*cette ligne*/
          if(isset($dateur)){
          $v['name'][$ti] = $dateur.$v['name'][$ti]; 
          }else{
          }
          /*SINON DEVALIDER CES LIGNES*/
                                         
          /*fin nettoyage nom*/ 
           
          
           //echo 'name : '.$v['name'][$ti].'<br />';
           //echo 'type : '.$v['type'][$ti].'<br />';
           //echo 'tmp : '.$v['tmp_name'][$ti].'<br />';
           //echo 'error : '.$v['error'][$ti].'<br />';
           //echo 'size : '.$v['size'][$ti].'<br />';
           
                     
           
           //On fait un tableau contenant les extensions autorisées.
           //Comme il s'agit d'un avatar pour l'exemple, on ne prend que des extensions d'images.
           //$extensions = array('.png', '.gif', '.jpg', '.jpeg'); /*ici des images*/
           // récupère la partie de la chaine à partir du dernier . pour connaître l'extension.
           $extension = strrchr($v['name'][$ti], '.');
           //Ensuite on teste
           if(!in_array($extension, $extensions)) //Si l'extension n'est pas dans le tableau
           {
           $erreur .= ' Vous devez uploader un fichier de type gif, jpg, jpeg<br />';//exit;
           }
           
           /*et si il fake ou spoof*/
           $blacklist = array(".php", ".phtml", ".php3", ".php4",".exe",".bin",".zip",".js",".bat");  /*etc ...*/
           foreach ($blacklist as $item) {
           if(preg_match("/$item\$/i", $v['name'][$ti])) {
           $erreur .= " EXTENSION DE FICHIER INTERDITE <br />";
           //exit;
           }
           }
           
           /*verifier le type mine autant de if, else if que de type*/
           if($v['type'][$ti]==="image/pjpeg"){
           //ok 
           }
           
           else if($v['type'][$ti]==="image/gif"){
           //ok
           }
           
           else{
           $erreur .= $v['name'][$ti].' Verifier le format<br />'; 
           $autorisation=false;
           }                                                                                                                                                                                                  
                                                  
           //Taille du fichier secu 2 par la function filesize
           $taille = filesize($v['tmp_name'][$ti]);
           if($taille>$size_max){
           $erreur .= $v['name'][$ti].' FICHIER VRAIMENT TROP GROS<br />';
           }else{
           }
           
           if($v['error'][$ti]===0){
           echo $v['name'][$ti].' uploadable <br />'; 
           }else{
           $erreur .= $v['name'][$ti].' Non uploadable<br />';
           $autorisation=false;
           //echo $erreur.'\n';
           }
           
               if($v['size'][$ti]>$size_max){
               
               $erreur .= $v['name'][$ti].' FICHIER TROP GROS<br />';
               $autorisation=false;
               
               } elseif($erreur===""){
               
               
               /*pas d erreur on traite*/    

                               
               $autorisation=true;
               
               /*upload*/
               
               $f=$v['tmp_name'][$ti];
               $path="upload/".$v['name'][$ti];
                                   
                   if(isset($f) && !empty($f) && $autorisation==true){
                   
                   copy($f,$path);
                   
                   @unlink($f); /*on efface le tmp*/
                   
                   echo '<h3><font color="green">Copie reussie</h3></font>'.$v['name'][$ti].'<br />';
                   
                   
                          if(file_exists($path)!=""){
                          
                          echo "<p>";
                          echo "file name :".$v['name'][$ti]."<br/>";
                          echo "file size :".$v['size'][$ti]."<br/>";
                          echo "file type :".$v['type'][$ti]."<br/>";
                          echo "<img src=\"".$path."\" width=\"150\" height=\"150\">";
                          echo "</p>";
                          
                          }else{
                          echo 'image1 ?<br />';
                          }
                                       
                   }else{
                   
                   $autorisation=false;
                   $path="";
                   $f="";
                   }
               
               }else{            
               
                                       
           
              
              
              }
              
           echo '<font color="red">'.$erreur.'</font>';   
           /*image suivante*/            
           
           $ti++;
           $autorisation=false; /*prochain $_FILES non autorisé*/ 
           
           }/*fin du while*/
  
     
  
  } /*fin du foreach*/

echo '</pre></div>';

exit;

}else{
$form = '<table width="500" border="0" align="center" cellpadding="0" cellspacing="1" bgcolor="#CCCCCC">
<tr>
<form action="" method="post" enctype="multipart/form-data" name="form1" id="form1">
<td>
<table width="100%" border="0" cellpadding="3" cellspacing="1" bgcolor="#FFEEDD">
<tr>
<td><strong>Uploadeur Multiple</strong></td>
</tr>
';
$i=0;
while($i<$j){
$form .='<tr>';
$form .= '<td>CHOISIR UN FICHIER '.($i+1).'  
<input name="ufile[]" type="file" id="ufile[]" size="50" /></td>
</tr>';
$i++;
}

$form .= '<td align="center"><input type="submit" name="Sub" value="Upload" /></td>
</tr>
</table>
</td>
</form>
</tr>
</table>';
echo $form;
}



/*listage du repertoire */

echo '<div align="center">';

if ($handle = opendir($rep)) {
    while (false !== ($file = readdir($handle))) {
        if ($file != "." && $file != "..") {
            
            //$extensions = array('.png', '.gif', '.jpg', '.jpeg'); /*ici des images*/
            // récupère la partie de la chaine à partir du dernier . pour connaître l'extension.
            $extension = strrchr($file, '.');
           //Ensuite on teste
            if(in_array($extension, $extensions)) //Si l'extension n'est pas dans le tableau
            {
           
            echo $file.' : <a href="?del='.$file.'">Effacer</a> <a href="'.$rep.'/'.$file.'">Voir</a><br />';
            
            
            }else{
            
            /* les fichiers interdits */ 
            
            }
            
        }
    }
    closedir($handle);
}
 
echo '</div>';
?>

Conclusion :

- bricoler en une aprés-midi
- j'aimerai partager des idées de sécurisation
- si on ajoute un systeme d'identification simple on a un petit gestionnaire
- on pourra facilement interfacer sur mysql si on ajoute des champs au formulaire ...

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.