Upload multiple php/javascript en 36 lignes de code

Contenu du snippet

Upload multiple en... un peu plus que 36 lignes: 82, en fait. J'ai rajouté un contrôle du type Mime et de la taille du fichier.
J'ai fait dans le simple. C'est la première source que je poste. Il existe déjà plein de solutions pour l'upload multiple, mais toutes celles que j'ai vues me prenaient la tête... Celle-ci fait tout ce qu'il faut en 36 (ou 37) lignes, et sans prendre la tête ! Testée sur IE8, FF, NN9.

Source / Exemple :


<head><title>Upload multiple en (36) 82 lignes de code</title>
<script type="text/javascript"><!--
function ajouter()
{	var br = document.createElement('br');	// je crée une balise <br />
	var neo = document.createElement('input');	// je crée un élément <input>
	neo.setAttribute('name','srcfic[]');	// je donne à mon INPUT le nom du tableau
	neo.setAttribute('type','file');	// je précise qu'il est de type FILE
	neo.setAttribute('size','95');		// je précise sa taille
	var sortie = document.getElementById("aufront");	// je précise où placer mon INPUT
	sortie.appendChild(neo);	// je le mets en place, ainsi qu'un retour à la ligne
	sortie.appendChild(br);		 }
//--></script>
</head>
<body>
<form enctype="multipart/form-data" action="#VersServeur" method="post" name="uplo">
<input type="hidden" name="drapeau" id="drapeau" value="oui" />
<div id="aufront"><label>Fichier(s) à envoyer vers le serveur :</label><br /><br />
<input name="srcfic[]" type="file" size="95"><br>	<!-- j'ai créé un tableau de fichiers à envoyer -->
</div>	<!-- script de Richard BACH 			http://www.valneandre.eu 				-->
Vous pouvez ajouter des fichiers avant d'envoyer : <input type="button" value="Encore un ?" onclick="ajouter()" /><br />
<input type="submit" value="Envoyer"></form>
<div name="VersServeur" id="VersServeur">
	<?php  
	$destin = "downloads";	// changer ceci par le nom du dossier destinataire souhaité
if (isset($_POST["drapeau"]))
{	echo '<h2>Envoi des fichiers ...</h2>';
//=====================================================================================================================				
	for($x=0;$x<sizeof($_FILES["srcfic"]["name"]);$x++)
	{	$nom = $_FILES['srcfic']['name'][$x];
		if ($_FILES['srcfic']['error'][$x] >0)
			{
			echo 'Erreur sur le fichier :&nbsp;' . $_FILES['srcfic']['error'][$x] . "<br /><br />";
			}	
		else
		{
			if (file_exists("$destin/$nom"))	// si le fichier existe déjà, renommer l'ancien
				{				
				$ancienfic = $nom . microtime() . ".old" ; // certitude de n'avoir pas 2 noms pareils
				rename("$destin/$nom","$destin/$ancienfic");
				echo "<br />Le fichier " . $nom . " existe déjà<br />L'ancien " . $nom . " sera renommé " . $ancienfic . "<br />";
				}
			$siz = round($_FILES['srcfic']['size'][$x] / 1024,2);	// calcul de la taille en Ko
			$typ = $_FILES['srcfic']['type'][$x];	// examen du type MIME
			echo "Type&nbsp;:&nbsp;$typ<br />Taille&nbsp;:&nbsp;$siz&nbsp;Ko<br />";
			if($siz > 256)	// si la taille du fichier est supérieure à 256 Ko
				{
					echo "Fichier &quot;$nom&quot; trop volumineux pour l'upload<br /><br />";
				}
			else	// sinon, filtrer les types MIME admis avant d'uploader
				{
				switch ($typ)
					{
						case "image/gif":
						case "image/pjpeg":
						case "image/jpeg":
						case "image/x-png":
						case "image/png":
						case "image/tiff":
						case "image/bmp":
						if(move_uploaded_file($_FILES['srcfic']['tmp_name'][$x],"$destin/$nom"))	// si tout s'est bien passé
							{
								echo "<strong>Le fichier &quot;" . $_FILES['srcfic']['name'][$x] . "&quot; a été correctement envoyé "; 
								echo "dans le dossier &quot;$destin/&quot;</strong><br><br />";
								chmod("$destin/$nom",0644);	
							}
						else // sinon (case restée vide, ou fichier pas passé...)
							{	if ($nom=="") $nom = "Fichier_Inconnu"; 
							  { echo "Désolé, je n'ai pas pu envoyer le fichier &quot;$nom&quot; dans le dossier &quot;$destin/&quot; !<br /><br />"; }
							}
						break;
						// par défaut: rejeter les fichiers autres qu'images
						default:echo "<br />Fichier &quot;$nom&quot; d'un type incorrect<br /><br />";break;
					} // fermeture de switch(type)
				} // fermeture de if(size>256) else...
		} // fermeture de if(error) else...
	} // fermeture de for(x=0;...)
//=====================================================================================================================				
} // fermeture de if(isset...)
	?>
</div></body>

Conclusion :


Un petit upload simple, sans prétention.

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.