Multi-upload v1 -

Soyez le premier à donner votre avis sur cette source.

Vue 17 205 fois - Téléchargée 1 095 fois

Description

Mon code sert a uploader un nombre illimiter de fichier en meme temps (dans la limite du serveur notament "upload_max_filesize" dans le php.ini)
et de les renomers
c est surtout pour montrer un exemple de variable dynamique , et surment quelques astuces pour les moin iniciés

Source / Exemple :


<?php 
# Copyright © 2005 stayve
# stayve34@homail.com
# multi upload v1

define('NB_FILE_UPLOAD', '10'); // nombre de fichier a envoyer (aucune limite :) )
define('MAX_SIZE_FILE_UPLOAD',  '50000' ); //soit 50 Ko
define('FILE_UPLOAD_DIR', dirname($_SERVER['SCRIPT_FILENAME']).'/'); // direction des fichier a uploader
$array_extention_interdite = array( '.php' , '.php3' , '.php4' , '.exe' , '.msi' , '.htaccess' , '.gz' );

function func_message($message='', $ok='')
{
echo '<table width="100%" cellspacing="0" cellpadding="5">';
if($ok == true){ echo '<tr bgcolor="#99FF99" ><td width="100">&nbsp;</td><td class="text_noir">'.$message.'</td></tr>' ;}

if($ok == false){ echo '<tr bgcolor="#FF99CC" ><td width="100">&nbsp;</td><td class="text_noir">'.$message.'</td></tr>';}
echo '</table>';	
}

$action = (isset($_POST['action'])) ? $_POST['action'] :'' ;
$dossier = (isset($_POST['dossier'])) ? $_POST['dossier'] :''  ;
if($dossier != '') {$dossier = $dossier.'/';}
$message_true = '';
$message_false = '';

switch($action)
{
case 'upload' :	
chmod(FILE_UPLOAD_DIR,0777);

for($nb = 1 ; $nb <= NB_FILE_UPLOAD ; $nb ++ )
{ 

if( $_FILES['file_'.$nb]['size'] >= 10 )
{  
if ($_FILES['file_'.$nb]['size'] <= MAX_SIZE_FILE_UPLOAD )
{ 

if ( !in_array( ereg_replace('^:alnum:([-_.]?:alnum:)*\.' ,'.', $_FILES['file_'.$nb]['name'] ) , $array_extention_interdite) )
{ 
if($_POST['file_name_'.$nb] !=''){ $file_name_final = $_POST['file_name_'.$nb].$extension ;}
else { $file_name_final = $_FILES['file_'.$nb]['name'] ;}

$file_name_final = strtr($file_name_final, 'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ', 
   'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy'); 
$file_name_final = preg_replace('/([^.a-z0-1]+)/i', '_', $file_name_final ); 

$_FILES['file_'.$nb]['name'] = $file_name_final;

move_uploaded_file( $_FILES['file_'.$nb]['tmp_name'] , FILE_UPLOAD_DIR . $dossier . $file_name_final );

$message_true .= 'Le fichier est transféré : '.$_FILES['file_'.$nb]['name'] .'<br>'; 
}
else{
$message_false .= 'Le fichier à une extension interdite : '.$_FILES['file_'.$nb]['name'] .' <br>'; 
}
}
else{ $message_false .= 'Le fichier ne doit pas dépasser '.MAX_SIZE_FILE_UPLOAD/1000 . 'ko : " '.$_FILES['file_'.$nb]['tmp_name'].'" <br>';}
}
}//end for

break;
}
?>
<!doctype html public "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>

<title>Multi - Upload</title>
<style>
.body{	SCROLLBAR-ARROW-COLOR: #ff9933; 
SCROLLBAR-DARKSHADOW-COLOR: #000000; 
SCROLLBAR-BASE-COLOR: #005b70;
background-color:#ffffff}
.border{background-color:#000000}
.box{background-color:#f8f8f9;}
.text_noir{  color:#000000;
font-family: Verdana, Arial, sans-serif;
font-size: 11px;
font-weight:bold}
input, select{  font-family: Verdana, Arial, sans-serif;
font-size: 11px;
background-color: #ffffff;
border-color:"#ffffff"}

</style>
</head>
<body marginwidth="0" marginheight="0" topmargin="0" bottommargin="0" leftmargin="0" rightmargin="0">
<?php if (function_exists('ini_get')) {?><br>
<table width="600" border="0" cellspacing="1" cellpadding="0" align="center" class="border">
<tr> 
<td>
<table width="100%" border="1" align="center" cellspacing="5" cellpadding="2" class="box">
<tr class="text_noir">
<td colspan="2" align="center">Configuration du php.ini du serveur apache</td>
</tr>
<tr class="text_noir">
<td>file_uploads :</td>
<td> 
<?php if (ini_get('file_uploads') ==1) { echo 'On'; } else { echo 'Off'; }?>
</td>
</tr>
<tr class="text_noir">
<td>upload_max_filesize :</td>
<td> <?php echo ini_get('upload_max_filesize'); ?> </td>
</tr>
<tr class="text_noir">
<td>post_max_size :</td>
<td> <?php echo ini_get('post_max_size'); ?> </td>
</tr>
<tr class="text_noir">
<td>upload_tmp_dir :</td>
<td> <?php echo ini_get('upload_tmp_dir'); ?></td>
</tr>
<tr class="text_noir">
<td>Extension interdites :</td>
<td> <?php for ($i=0; $i < sizeof($array_extention_interdite); $i++)
{ echo $array_extention_interdite[$i] .' | '; }
?></td>
</tr>
</table> 
</td>
</tr>
</table><br>
<?php   }?>
<br>
<form name="form" enctype="multipart/form-data" method="post" action="<?php echo $_SERVER['PHP_SELF'] ; ?>">
<input type="hidden" name="action" value="upload">
<table  border="0" cellspacing="1" cellpadding="0" align="center" class="border">
<tr> 
<td>
<?php if($message_true != '') {  func_message($message_true, true); }
if($message_false != ''){  func_message($message_false, false); }
?>
<table width="100%" border="0" cellspacing="5" cellpadding="2" align="center" class="box">
<?php 
for($nb = 1 ; $nb <= NB_FILE_UPLOAD ; $nb ++ )
{  
?>
<tr class="text_noir"> 
<td>Fichier <?php echo $nb; ?></td> <td><input type="file" name="file_<?php echo $nb; ?>"></td>
<td>Nom du Fichier <?php echo $nb; ?> </td><td><input type="text" name="file_name_<?php echo $nb; ?>"></td>
</tr>
<?php } ?>
<tr> 
<td colspan="2" align="right" class="text_noir"><?php echo FILE_UPLOAD_DIR ;?>
<select name="dossier">		
<option value=""></option>
<?php 
$repertoire = opendir(FILE_UPLOAD_DIR);  
while( $file = readdir($repertoire) ) 
{ 
$file = str_replace('.','',$file);
if( is_dir($file)) { 
?>
<option value="<?php echo $file; ?>"> <?php echo $file; ?>/</option>
<?php 
} 
} 
closedir($repertoire); 
?>
</select>
</td>
<td colspan="2" align="right"><input type="submit" value=" Envoyer <?php echo $nb-1; ?> Ficher "></td>
</tr>
</table>
</td>
</tr>
</table>
</form>

<br><br>
<div align="center" class="text_noir">Copyright © 2005 stayve34@homail.com</div>

<br>		
</body>
</html>

Conclusion :


il y a certain bug au niveau de $_FILES['file']['tmp_name'] , mais c est gratuit alors que demande le peuple :)

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
1
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
25 mars 2011

Merci pour ce script!!

Mais il y juste quelque chose a modifier : au lieu de

Ligne 40 : ereg_replace('^[[:alnum:]]([-_.]?[[:alnum:]])*\.'

met preg_replace('/^[[:alnum:]]([-_.]?[[:alnum:]])*\./'

parce que la Function ereg_replace() is deprecated
Messages postés
1
Date d'inscription
mardi 28 février 2006
Statut
Membre
Dernière intervention
3 octobre 2007

J'ré-ouvre ce sujet fossilisé. Ça m'a l'air pas mal du tout pour ce que jveux faire. Seul problème: j'arrive pas a configurer le repertoire de destination des uploads, le define('FILE_UPLOAD_DIR', dirname($_SERVER['SCRIPT_FILENAME']).'/');

j'ai cherché les utilisations des différentes fonctions et variables mais j'ai pas réussi a les faire atterir ou jveu. En fait dès que je touche à ce paramètre l'upload ne fonctionne plus..

g mon dossier photos/ avec kom arborescence:
photos/admin/ (<--upload.php)
photos/pics/
photos/index.php

et je voudrais que les photos uploader tombent dans pics/

mais impossible je comprend pas ske jdois mettre après define('FILE_UPLOAD_DIR', ??? );

Si quelqu'un a le courage de se replonger ds ce script pour m'helper, c'est l'avant-dernier "gros morceaux" de mon site et je bloque là.
Messages postés
2
Date d'inscription
mercredi 11 mai 2005
Statut
Membre
Dernière intervention
10 février 2010

Voila je réanime ce vieux sujet o_O puisque j'ai attéri ici par une simple recherche, alors n'importe qui peut tomber ici et utiliser ce script qui comporte une grosse faille arrrrfff...

Le formulaire d'upload ci-dossus donne la possibilité de renomer les fichiers uploadés et c'est ici la faille :) Biensur les fichiers *.php sont interdit par le script, mais si je renome mon fichier *.php en *.jpg en local par exemple, et sur la page de l'upload je renome en *.php alors là mon fichier php passe son dificulté...

Résultat: ça peut faire d'énormes dégats à celui qui utilise ce script si sa page d'upload tombe entre des mains malveillantes.

/!\ Pensez à vérifier les extensions sur les cases à renomer /!\
Messages postés
131
Date d'inscription
samedi 16 avril 2005
Statut
Membre
Dernière intervention
8 avril 2015

est ce qu'il es normal que si one place le nom a droite du fichier qu'on upload on doit mettre aussi l'extension ? car en testant il envoi le fichier sans extension si je n'en met pas
Messages postés
4
Date d'inscription
mercredi 10 novembre 2004
Statut
Membre
Dernière intervention
26 septembre 2005

mdrrrr ,je pensais pas faire un debat sur les css

j ai mis le css dans la meme page pour la simple raison qu il n y a qu un script , ce n est pas un cms ou autre .....

mon prochain script sera surement sans css mais c est dommage , quand t arrive sur la page , t a un truc propre ....

remarque je ferais peut etre un cour pour mettre le css dans une page stylesheet.css mdrrrrr

en ce qui concerne le html vous aller me dire pourquoi il met 2 tableaux alors qu avec 1 sa suffie
avec un style: border-width: 1px; border-color:#000000;

pour les non innicier au joie des differents naviguateur
notamment mozilla , -le css bug "border-width: 1px"-

avec 2 tableaux ,peux importe le naviguateur ,le resultat a l affichage est le meme (mais forcement y a + de code html)

alors ont dit merci stayve pour le tuyau :)

@pluche
Afficher les 22 commentaires

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.