Télécharger plusieurs fichiers simultanément
Le téléchargement de plusieurs fichiers est possible
en utilisant des noms différents dans l'attribut
name
de la balise input
.
Il est aussi possible de télécharger plusieurs fichiers simultanément
et d'obtenir les informations sous forme de tableau. Pour cela, vous
devez utiliser la syntaxe de tableau dans les noms de balises
HTML, comme vous l'avez fait avec les sélections multiples
et les boîtes à cocher.
Exemple #1 Télécharger plusieurs fichiers simultanément
<form action="file-upload.php" method="post" enctype="multipart/form-data">
Envoyez plusieurs fichiers : <br />
<input name="userfile[]" type="file" /><br />
<input name="userfile[]" type="file" /><br />
<input type="submit" value="Envoyer les fichiers" />
</form>
Lorsque le formulaire ci-dessus a été envoyé, les
tableaux $_FILES['userfile'],
$_FILES['userfile']['name'], et
$_FILES['userfile']['size'] seront initialisés.
Par exemple, supposons que les fichiers
/home/test/review.html et
/home/test/xwp.out ont été téléchargés. Dans ce cas,
$_FILES['userfile']['name'][0]
contient review.html et
$_FILES['userfile']['name'][1] contient
xwp.out. Similairement,
$_FILES['userfile']['size'][0] va contenir
la taille du fichier review.html, etc.
$_FILES['userfile']['name'][0],
$_FILES['userfile']['tmp_name'][0],
$_FILES['userfile']['size'][0] et
$_FILES['userfile']['type'][0] sont aussi
créées.
Avertissement
Le paramètre
max_file_uploads limite le nombre
de fichiers qui peuvent être envoyés en une requête. Vous devrez vérifier que
votre formulaire ne tente pas d'envoyer plus de fichiers dans la requête que ne
le tolère cette limite.
Exemple #2 Téléverser un dossier entier
Dans les champs de téléversement de fichier HTML, il est possible de
téléverser un dossier entier avec l'attribut webkitdirectory
.
Cette fonctionnalité est supportée dans la plupart des navigateurs modernes.
Avec l'information full_path
, il est possible de
stocker les chemins relatifs ou reconstruire la même hiérarchie de dossier sur le dossier.
<form action="file-upload.php" method="post" enctype="multipart/form-data">
Send this directory:<br />
<input name="userfile[]" type="file" webkitdirectory multiple />
<input type="submit" value="Send files" />
</form>
Avertissement
L'attribut webkitdirectory
n'est pas standard et n'est
pas actuellement en cours de standardisation.
Ceci n'est pas à utiliser sur des sites de production tournés vers le Web :
ça ne fonctionnera pas pour tous les utilisateurs.
Il peut y avoir de grandes incompatibilités parmi les implémentations
et le comportement peut changer dans le futur.
PHP analyse uniquement les informations des chemins relatifs soumit par
le navigateur/user-agent et transmet les informations dans le tableau
$_FILES.
Il n'y a aucune garanties que les valeurs dans le tableau
full_path
contienne une vraie structure de dossier
et l'application PHP ne doit pas faire confiance à cette information.