Vous êtes ici :
Accueil Tutoriel Développement web PHP envoi et traitement des fichiers via un formulaire

PHP envoi et traitement des fichiers via un formulaire

ce tutoriel vous explique comment traiter l'envoi d'un ou plusieurs fichiers via le formulaire HTML

Qui n'a jamais rêvé de mettre sur son site un formulaire d'envoie de fichier ?

Qui n'a jamais envie de proposer à ses membres l'envoi de leurs photos du profil ?

Votre souci sera résolu dans ce tutoriel concernant l'envoie et traitement de fichier depuis un formulaire HTML qui semble être difficile au premier abort.

Cette fonctionnalité permet de télécharger à la fois du texte et des fichiers binaires. Avec les fonctions d'identification et de manipulation de fichiers de PHP, vous avez le contrôle total pour définir qui a le droit de télécharger mais aussi ce qui sera fait du fichier une fois qu'il sera téléchargé.

PHP est capable de recevoir des fichiers émis par un navigateur conforme à la norme RFC-1867. Tout d'abord les prérequis.

Les prérequis

  • comprendre le langage HTML en général et en particulier les formulaires
  • comprendre et manipuler les tableaux associatifs du PHP
  • maîtriser le traitement des formulaires en PHP

Voilà c'est tous ce qui est comme prérequis

Le tableau superglobal $_FILES

Quand vous envoyer des fichiers via un formulaire HTML c'est le tableau superglobal de PHP $_FILES qui traite les  données envoyées et non $_POST ou $_GET même si l'attribut de la balise HTML

"method" est égale "post" ou "get".

La variable globale $_FILES va contenir toutes les informations sur le fichier téléchargé. Son contenu est détaillé dans notre exemple ci-dessous. Notez que l'on suppose que le nom de la variable du fichier téléchargé est fichier, mais peut être n'importe quel nom de votre choix.

Voici la description de chaque clé :

$_FILES['fichier']['name'] : Contient le nom original du fichier, tel que sur la machine du client web.

$_FILES['fichier']['type'] : Le type MIME du fichier, si le navigateur a fourni cette information. Par exemple, cela peut être "image/gif", "text/plain". Ce type mime n'est cependant pas vérifié du côté de PHP et, donc, ne prend pas sa valeur pour se synchroniser.

$_FILES['fichier']['size'] : La taille, en octets, du fichier téléchargé.

$_FILES['fichier']['tmp_name'] : Le nom temporaire du fichier qui sera chargé sur le serveur.

$_FILES['fichier']['error'] : Le code d'erreur associé au téléchargement de fichier.

Note :

Voir  les directives de configuration file_uploads, upload_max_filesize, upload_tmp_dir, post_max_size et max_input_time dans le fichier de configuration de PHP php.ini pour adapter la configuration à votre besoin

Réalisation du formulaire HTML

Un formulaire de téléchargement de fichiers peut être construit en créant un formulaire spécifique comme ceci :

<!-- L'enctype, DOIT être spécifié comme ce qui suit -->
<form enctype="multipart/form-data" action="_URL_" method="post">
 <!-- MAX_FILE_SIZE doit preceder le champ input de type file -->
 <input type="hidden" name="MAX_FILE_SIZE" value="_TAILLE_MAX_" />
 <!-- Le nom qui determine le nom dans le tableau $_FILES -->
 <input name="fichier" type="file" />
 <input type="submit" value="Envoyer le fichier" />
</form>

_URL_ dans l'exemple précédent doit être remplacé et pointé vers un fichier de traitement PHP.

_TAILLE_MAX_ est à remplacer par la taille maximum en octet du fichier à télécharger

Le champ caché MAX_FILE_SIZE (mesuré en octets) doit précéder le champ input de type file et sa valeur représente la taille maximale acceptée du fichier par PHP. Cet élément de formulaire doit toujours être utilisé car il permet d'informer l'utilisateur que le transfert désiré est trop lourd avant d'atteindre la fin du téléchargement. Gardez à l'esprit que ce paramètre peut être "trompé" du côté du navigateur facilement, aussi ne faîtes pas confiance à ce dernier, ne s'agissant finalement que d'une fonctionnalité de convenance côté client. Le paramètre PHP (côté serveur) à propos de la taille maximale d'un fichier téléchargé, ne peut, lui, être trompé.

Note:

Assurez-vous que votre formulaire de téléchargement de fichier contienne enctype="multipart/form-data", dans la balise

sinon, le fichier ne sera pas téléchargé.

 

Le fichier téléchargé sera stocké temporairement dans le dossier temporaire du système, à moins qu'un autre dossier soit fourni avec la directive  upload_tmp_dir du php.ini. Le dossier par défaut du serveur peut être changé dans l'environnement via la variable TMPDIR. Modifier la valeur de cette variable avec la fonction putenv() dans un script PHP sera sans effet. Cette variable d'environnement peut aussi être utilisée pour s'assurer que d'autres opérations fonctionnent aussi sur les fichiers téléchargés.

Cas pratique

L'exemple suivant va télécharger un fichier venant d'un formulaire

  • code HTML du formulaire

<!DOCTYPE html>
<html>
<head>
<meta charset='utf-8' />
<title>Envoie de fichier via un formulaire</title>
</head>
<body>
<!-- traitement sur la meme page -->
<form action="" method='post' enctype="multipart/form-data">
<p>Formulaire d'envoie d'un fichier</p>
<p>
<input type='file' name='fichier' />
</p>
<p>
<input type='submit' name='submit' value='Envoyer le fichier' />
</p>
</form>
</body>
</html>

 

  • Traitement via PHP :

Voici les étapes du traitement :

  1. on vérifie que le formulaire a été envoyé
  2. on vérifie que l'utilisateur a choisi un fichier grâce à l'utilisation de la fonction is_uploaded_file()
  3. on verifie certains paramètres (taille du fichier voulue, type du fichier, etc ) selon notre besoin grâce aux informations du tableau global $_FILES
  4. puis on déplace le fichier téléchargé dans le repertoire désiré grâce à la fonction move_uploaded_file()

Voilà en minimum les étapes de la validation du formulaire

Maintenant les codes de traitement à mettre avant le code HTML ci-dessus :

<?php
//on vérifie que le formulaire a été envoyé
if(isset($_POST['submit'])){
/*dossier où le fichier sera téléchargé il doit exister
à l'avance sur votre serveur, sinon PHP vous affiche
un message d'erreur s'il n'existe pas
*/ 
$dossier='upload/'; 
//l'utilisateur a choisi un fichier
if(is_uploaded_file($_FILES['fichier']['tmp_name'])){
//nom du fichier 
$nom_fichier=$_FILES['fichier']['name'];
//on déplace le fichier dans le repertoire
if(move_uploaded_file($_FILES['fichier']['tmp_name'],$dossier.$nom_fichier)){
echo "<p>Le fichier $nom_fichier a été déplacé dans le repertoire $dossier</p>";
}
else{
//il ya eu une erreur
echo "<p>Erreur lors du déplacement du fichier $nom_fichier</p>";
}
}
else{
echo "<p>Aucun fichier séléctionné</p>";
}
}
?>

Voici le code complet à enregistrer dans un fichier nommé envoi.php par exemple :

<?php
//on vérifie que le formulaire a été envoyé
if(isset($_POST['submit'])){
/*dossier où le fichier sera téléchargé il doit exister
à l'avance sur votre serveur, sinon PHP vous affiche
un message d'erreur s'il n'existe pas
*/ 
$dossier='upload/'; 
//l'utilisateur a choisi un fichier
if(is_uploaded_file($_FILES['fichier']['tmp_name'])){
//nom du fichier 
$nom_fichier=$_FILES['fichier']['name'];
//on déplace le fichier dans le repertoire
if(move_uploaded_file($_FILES['fichier']['tmp_name'],$dossier.$nom_fichier)){
echo "<p>Le fichier $nom_fichier a été déplacé dans le repertoire $dossier</p>";
}
else{
//il ya eu une erreur
echo "<p>Erreur lors du déplacement du fichier $nom_fichier</p>";
}
}
else{
echo "<p>Aucun fichier séléctionné</p>";
}
}
?>
<!DOCTYPE html>
<html>
<head>
<meta charset='utf-8' />
<title>Envoie de fichier via un formulaire</title>
</head>
<body>
<!-- traitement sur la même page -->
<form action='' method='post' enctype="multipart/form-data">
<p>Formulaire d'envoie d'un fichier</p>
<p>
<input type='file' name='fichier' />
</p>
<p>
<input type='submit' name='submit' value='Envoyer le fichier' />
</p>
</form>
</body>
</html>

Voilà en tout ce que l'on appelle l'envoi et le traitement de fichier via un formulaire HTML en PHP, si vous avez des questions alors posez les en commentaire.

Facile non ?  laugh




Tony NGUEREZA 05 Nov 2015, 23h12

Aucun commentaire n'a encore été ajouté soyez le premier a ajouté un commentaire

Vous n'êtes pas connecter veuillez vous connecter ou créer gratuitement un compte pour poster des commentaires

Vous êtes ici :
Accueil Tutoriel Développement web PHP envoi et traitement des fichiers via un formulaire