Forums Développement Multimédia

Les formations Mediabox
Les formations Mediabox

Uploader un fichier en HTTP sur un serveur avec PHP

Compatible PHP. Cliquer pour en savoir plus sur les compatibilités.Par Qwix, le 13 août 2005

Introduction

Dans ce tutorial, nous allons voir comment uploader un fichier sur un serveur avec PHP, c'est une méthode assez simple et rapide à mettre en oeuvre, comme vous allez pouvoir le constater. Pour cela nous allons réaliser notre upload en deux étapes: 1- création du formulaire qui va nous permettre de choisir le fichier à envoyer 2- upload du fichier via HTTP

Création du formulaire

Voici le code source d'un formulaire type d'envoi de fichier:

<form name="formulaire_envoi_fichier" enctype="multipart/form-data" method="post" action="./upload.php">
  <input type="file" name="fichier_choisi">
  <br>
  <br>
  <input type="submit" name="bouton_submit" value="Envoyer le fichier">
</form>

Vous pouvez constater que c'est un formulaire banal à une exception près, le type d'encodage spécifié: enctype=“multipart/form-data” L'attribut enctype doit impérativement être spécifié avec la valeur multipart/form-data sinon il sera impossible d'envoyer le fichier.

Envoi du fichier sur le serveur Voici le code PHP nécessaire pour envoyer un fichier sur le serveur:

<?php
//on vérifies que le champ est bien rempli:
if(!empty($_FILES["fichier_choisi"]["name"]))
{
	//nom du fichier choisi:
	$nomFichier    = $_FILES["fichier_choisi"]["name"] ;
	//nom temporaire sur le serveur:
	$nomTemporaire = $_FILES["fichier_choisi"]["tmp_name"] ;
	//type du fichier choisi:
	$typeFichier   = $_FILES["fichier_choisi"]["type"] ;
	//poids en octets du fichier choisit:
	$poidsFichier  = $_FILES["fichier_choisi"]["size"] ;
	//code de l'erreur si jamais il y en a une:
	$codeErreur    = $_FILES["fichier_choisi"]["error"] ;
 
	//chemin qui mène au dossier qui va contenir les fichiers uplaod:
	$chemin = "./upload_fichier/" ;
 
	if(copy($nomTemporaire, $chemin.$nomFichier))
		echo("<br>l'upload a réussi") ;
	else
		echo("<br>l'upload a échoué") ;
}//fin if
else
{
	echo("Vous n'avez pas choisit de fichier!!<br>") ;
	echo("<a href=\"./choix_fichier.html\">Retour</a>") ;
}//fin else
?>

Si jamais votre version de PHP est assez ancienne ou si vous ne pouvez pas récupérer les informations concernant le fichier à uploader, remplacer les $_FILES par $HTTP_POST_FILES .

Pour avoir une explication concernant la récupération d'informations pour un fichier, vous pouvez lire ce tutorial: Récupérer des données d'un formulaire en PHP

Nous avons la variable $chemin qui, comme son nom l'indique, a comme valeur le chemin qui mène au dossier qui va contenir les fichiers que vous allez uploader.

Ensuite il suffit d'utiliser la fonction copy qui va donc envoyer le fichier sélectionné sur votre serveur.

Pour activer le mode silencieux de copy il vous suffit de placer un arobase devant: @copy(…) ainsi si une erreur survient, elle ne sera pas affichée à l'écran, cette option est à rajouter lorsque vos précédures de test sont terminées, sinon vous ne saurez pourquoi le fichier n'est pas envoyé. Je vous conseille donc d'utiliser la version normale de copy(c'est à dire sans le '@') tant que vous n'êtes pas certains que l'upload se déroule comme il faut.

Une alternative à la fonction copy est la fonction move_uploaded_file qui fonctionne tout aussi bien, utilisez celle qui vous fait plaisir, même s'il est plus sécurisé d'utiliser move_uploaded_file

Erreur types: Lorsque vous utilisez cette fonction, il est possible que vous voyez une de ces deux erreurs affichées à l'écran:

Warning: Unable to create 'le_nom_de_votre_fichier': No such file or directory in 'le_chemin_specifie' on line xx

Si tel est le cas, c'est que le chemin que vous avez spécifié n'est pas correct.

Warning: Unable to create 'le_nom_de_votre_fichier': Permission denied in 'le_chemin_specifie' on line xx

C'est que vous n'avez pas les permissions d'écriture sur ce dossier, à vous de spécifier des droits d'écritures suivant vos désirs.




Tutorial de Qwix