Téléversement
Le téléversement, aussi connu sous le nom «Upload» en anglais, est l'action consistant a transférer un fichier d'un navigateur Web vers un serveur Web. Contrairement à la transmission d'un formulaire normal, l'envoi d'un fichier dans un formulaire nécessite l'envoi d'informations binaires lequel est indiqué comme un type d'attachement ou d'un formulaire de données avec de multiples parties (enctype="multipart/form-data"). De plus, vous ne pouvez pas transmettre un fichier en méthode «GET», il faut obligatoirement que la méthode soit «POST» (method="post"). Enfin, vous devez indiquer le type="file" dans la balise INPUT du HTML. Généralement, les données en brut transmit par le protocole HTTP ou HTTPS auront donc un format ressemblant à ceci :
POST / HTTP/1.1HOST: host.gladir.com
Cookie: quelques_cookies...
Connection: Keep-Alive
Content-Type: multipart/form-data; boundary=12345
--12345
Content-Disposition: form-data; name="quelquestexte"
quelques texte étant écrit dans un format HTML...
--12345
Content-Disposition: form-data; name="nom_du_post_request" filename="nomdufichier.xyz"
contenu de nomdefichier.xyz étant téléveser dans votre fomrulaire avec input[type=file]
--12345
Content-Disposition: form-data; name="image" filename="image-binaires.jpg"
contenu de image-binaires.jpg ...
--12345--
Configuration
Pour pouvoir téléverser un fichier, il faut d'abord que la configuration PHP du fichier php.ini le permet. Ainsi, vous devez donc vous assurez que le paramètre suivant est belle et bien activé :
file_uploads = On |
De plus, assurez-vous que la taille des fichiers pouvant être téléverser n'est pas une limite trop basse. Ainsi, vous pouvez par exemple configurer la limite des téléversement à 50 Mo en ajoutant les deux paramètres suivants également dans le fichier php.ini :
upload_max_filesize = 50M post_max_size = 50M |
Si vous avez configurer correctement votre serveur, ensuite, vous devez indiquer dans le formulaire HTML qu'il est de type «multipart/form-data» car sinon il ne transféra que les champs textes du formulaire et il n'enverra pas les champs binaires comme les fichiers par exemple.
Sauvegarde sur disque
L'exemple suivant, contenu dans le fichier «upload-to-file.php» permet de télécharger un fichier d'un navigateur Web vers le serveur Web dans le dossier «uploads» :
- <!DOCTYPE html>
- <html>
- <body>
- <form action="upload-to-file.php" method="post" enctype="multipart/form-data">
- Choisissez un fichier à téléverser:
- <input type="file" name="fileUpload" id="fileUpload" />
- <input type="submit" value="Téléverser" name="submit" />
- </form>
- </body>
- </html>
- <?php
- if(isset($_POST["submit"])) {
- // Téléverse et copie immédiatement le fichier dans un dossier
- if (move_uploaded_file($_FILES["fileUpload"]["tmp_name"], "uploads/" . basename($_FILES["fileUpload"]["name"]))) {
- echo "Le fichier ". basename( $_FILES["fileUpload"]["name"]). " a été téléversé.";
- } else {
- echo "Désolé, une erreur s'est produite en téléversant le fichier.";
- }
- }
- ?>
Téléversement en mémoire
L'exemple suivant, contenu dans le fichier «upload-to-memory.php» permet de télécharger un fichier d'un navigateur Web dans une variable :
- <!DOCTYPE html>
- <html>
- <body>
- <form action="upload-to-memory.php" method="post" enctype="multipart/form-data">
- Choisissez un fichier à téléverser:
- <input type="file" name="fileUpload" id="fileUpload" />
- <input type="submit" value="Téléverser" name="submit" />
- </form>
- </body>
- </html>
- <?php
- if(isset($_POST["submit"])) {
- $binary = file_get_contents($_FILES["fileUpload"]["tmp_name"]);
- // Sauvegarde le fichier
- file_put_contents("uploads/" . basename($_FILES["fileUpload"]["name"]),$binary);
- }
- ?>
Voir également
Langage de programmation - HTML - Référence des balises - INPUT
Langage de programmation - JavaScript - Soumettre un formulaire en JavaScript
Articles - Comparatif des méthodes «POST» ou «GET» ?