Upload de fichier + confirmation

Kenji
Invité n'ayant pas de compte PHPfrance

23 août 2005, 15:49

Bonjour,

Je souhaite implémenter une fonction d'upload de fichier pour les visiteurs de mon site.
Cette fonction est disponible à tous les visiteurs du site, sans qu'ils n'aient à se logguer/s'identifier avec un espace personnel.

Pour des raisons évidentes de sécurité, j'aimerai afficher une confirmation à l'utilisateur après qu'il ait choisi le fichier à uploader,
et ce avant que le fichier ne soit vraiment uploadé sur mon serveur.

[Sélection] -> [Confirmation] -> [Upload]

Problème : dans les formulaire, seuls les <input> de type "file" permettent à un utilisateur de choisir un fichier (explorateur de fichiers),
et on est obligé dès lors d'uploader ledit fichier dès la soumission du formulaire...

La seule solution que je vois est
  • 1) uploader le fichier dès que l'utilisateur le sélectionne dans le 1er formulaire.
    2) Le fichier est alors mis dans un répertoire temporaire côté serveur, où il attend la confirmation de la part de l'utilisateur...
    3) Une fois confirmé, le fichier est déplacé dans son répertoire définitif.
Je trouve cependant cette méthode plutôt *crade*
sachant qu'il faudra à un moment où à un autre supprimer ce fichier temporaire,
au cas où l'utilisateur ne confirme pas sa soumission...

Peut être qu'un expert plus averti que moi en php vois une solution plus évidente à mon problème ? :(
Si c'est le cas, merci d'éclairer mes lanternes! :D

Eléphant du PHP | 164 Messages

24 août 2005, 12:24

j'ai un script qui tourne bien si tu veut!

Kenji
Invité n'ayant pas de compte PHPfrance

24 août 2005, 22:36

Dis moi juste comment tu procèdes ? :(

Eléphant du PHP | 164 Messages

25 août 2005, 00:00

<?php
// Récupération du dossier dans lequel le fichier sera uploadé	//
$DESTINATION_FOLDER = "images/";							//
// Taille maximale de fichier, valeur en bytes					//
$MAX_SIZE = 5000000;											//
// Récupération de l'url de retour								//
$RETURN_LINK = $_SERVER['HTTP_REFERER'];						//
// Définition des extensions de fichier autorisées (avec le ".")//
$AUTH_EXT = array(".doc", ".pdf", ".jpg", ".ppt", ".xls",		//
	".bmp", ".gif");											//
// ############################################################ //

// Fonction permettant de créer un lien de retour automatique

function createReturnLink(){
	global $RETURN_LINK;
	echo "<a href='".$RETURN_LINK."'>Retour</a><br>";
}

// Fonction permettant de vérifier si l'extension du fichier est
// autorisée.

function isExtAuthorized($ext){
	global $AUTH_EXT;
	if(in_array($ext, $AUTH_EXT)){
		return true;
	}else{
		return false;
	}
}

// On vérifie que le champs contenant le chemin du fichier soit
// bien rempli.

if(!empty($_FILES["file"]["name"])){
	
	// Nom du fichier choisi:
	$nomFichier = $_FILES["file"]["name"] ;
	// Nom temporaire sur le serveur:
	$nomTemporaire = $_FILES["file"]["tmp_name"] ;
	// Type du fichier choisi:
	$typeFichier = $_FILES["file"]["type"] ;
	// Poids en octets du fichier choisit:
	$poidsFichier = $_FILES["file"]["size"] ;
	// Code de l'erreur si jamais il y en a une:
	$codeErreur = $_FILES["file"]["error"] ;
	// Extension du fichier
	$extension = strrchr($nomFichier, ".");
	
	// Si le poids du fichier est de 0 bytes, le fichier est
	// invalide (ou le chemin incorrect) => message d'erreur
	// sinon, le script continue.
	if($poidsFichier <> 0){
		// Si la taille du fichier est supérieure à la taille
		// maximum spécifiée => message d'erreur
		if($poidsFichier < $MAX_SIZE){
			// On teste ensuite si le fichier a une extension autorisée
			if(isExtAuthorized($extension)){
				// Ensuite, on copie le fichier uploadé ou bon nous semble.
				$uploadOk = move_uploaded_file($nomTemporaire, $DESTINATION_FOLDER.$nomFichier);
				if($uploadOk){
					echo("L'upload a réussi !<br><br>");
					echo(createReturnLink());
				}else{
					echo("L'upload a échoué !<br><br>");
					echo(createReturnLink());
				}
			}else{
				echo ("Les fichiers avec l'extension $extension ne peuvent pas être uploadés !<br>");
				echo (createReturnLink()."<br>");
			}
		}else{
			$tailleKo = $MAX_SIZE / 1000;
			echo("Vous ne pouvez pas uploader de fichiers dont la taille est supérieure à : $tailleKo Ko.<br>");
			echo (createReturnLink()."<br>");
		}		
	}else{
		echo("Le fichier choisi est invalide !<br>");
		echo (createReturnLink()."<br>");
	}
}else{
	echo("Vous n'avez pas choisi de fichier !<br>");
	echo (createReturnLink()."<br>");
}
?>