Académique Documents
Professionnel Documents
Culture Documents
2018 – 2019
Cours PHP
n°5
Introduction
Construction du formulaire
Pour permettre à un utilisateur de mettre en ligne un fichier, il faut spécifier dans le formulaire
que des fichiers seront à transmettre. Cela se passe dans la balise ouvrante « <form> », dans
son en-tête, comme ci-dessous :
<form method="post" action="" enctype="multipart/form-data">
La valeur de la propriété « enctype » permet d’indiquer que le contenu des données à passer
lors de la validation du formulaire sera de type binaire (fichiers) et texte (champs du
formulaire).
Il faut maintenant ajouter un bouton pour que l’utilisateur puisse sélectionner le fichier qu’il
désire envoyer. Afin d’afficher un bouton « Parcourir » dans le formulaire, il faut spécifier un
champ de type « file » comme ci-dessous.
<input type="file" name="fichier" id="fichier"/>
Bien évidemment, vous pouvez mélanger des champs textes et fichiers dans un même
formulaire. Faites attention au nom pour bien les différencier. Pour ce qui est de la validation,
rien ne change par rapport à un formulaire classique.
Pour récupérer les données, il faut bien sûr passer par du PHP. Les fichiers transférés via un
formulaire possèdent une variable serveur dédiée « $_FILES ». Elle s’utilise exactement de la
même manière que « $_POST » mais comporte des données spécifiques pour chaque fichier
envoyé comme son nom d’origine, son type, son poids et son nom temporaire. Voir doc PHP.
Tout comme pour le « $_POST » , le fichier est identifié par la valeur dans le « name » de l’input.
Exemple pour récupérer le nom du fichier :
$_FILES['fichier']['name']
Le fichier est mis dans un répertoire temporaire en attendant son déplacement vers son
répertoire définitif. Il possède alors un nom lui aussi temporaire, ressemblant à une chaîne de
caractères du type « phpSjsuHO ».
L’upload de fichier est un élément sensible. Il faut penser à vérifier l’extension, voir
« SplFileInfo() », la taille du fichier et lui donner un nom unique.
L’utilisateur ne peut pas mettre en ligne des fichiers très lourd. Il y a une limitation définie par
le serveur dans « upload_max_filesize » à 2Mo par défaut. Cette valeur est modifiable mais
attention au timeout.
Déplacement du fichier
Une fois la vérification des données du fichier faite et que le répertoire existe, le fichier peut
être déplacé. PHP intègre nativement une fonction répondant à cette fonctionnalité,
« move_uploaded_file() ». Elle retournera false si une erreur survient et true si tout se passe
correctement.
Attention, vous devez avoir les droits en écriture sur le répertoire sinon votre fichier ne sera
pas déplacé.