Page 1 sur 1

UPLOAD_ERR_EXTENSION

Posté : 29 avr. 2009, 19:58
par dunbar
Bonsoir,

J'essaye de créer un formulaire d'upload correct mais je bute sur les extensions.
Mon code :
//-->Traitement de l'avatar.--//
    $message_info = "";
	if (isSet($_POST["OK"]))
	   {

	   	//-->Récupération des info du fichier.--//
	   	$info_fichier = $_FILES["fichier"];
	   	//-->Extraction du NOM.--//
	   	$nom = valeur_saisie($info_fichier["name"]);
	   	//-->Extraction du TYPE.--//
	   	$type_mime = $info_fichier["type"];
	   	 //-->Type authoriser.--//
	   	$type_ok = $nom(array('png' => 'image/png',
                              'jpe' => 'image/jpeg',
                              'jpeg' => 'image/jpeg',
                              'jpg' => 'image/jpeg',
                              'gif' => 'image/gif',
                              'bmp' => 'image/bmp'));
	   	//-->Extraction du TAILLE.--//
	   	$taille = $info_fichier["size"];
	   	//-->Emplacement temporaire.--//
	   	$fichier_temporaire = $info_fichier["tmp_name"];
	   	//-->Les codes Erreru.--//
	   	$code_erreur = $info_fichier["error"];
	   	 	//-->Controle et traitement.--//
	   	 	switch ($code_erreur)
	   	 	  {
	   	 	  	case UPLOAD_ERR_OK :
	   	 	  	//-->Destination final.--//
	   	 	  	$destination = "images/avatars/".time().$nom;
	   	 	  	//-->Copie du fichier temporaire et test.--//
	   	 	  		if (copy($fichier_temporaire,$destination))
	   	 	  			{
                         //-->Si copie OK.--//
                         $message_info  = "Transfert terminé - Fichier = ".$nom;
                         break;
                        } else
                               {
                        		 $message_info = "Problème de copie sur le serveur";
                        	   }

              break;
              	case UPLOAD_ERR_NO_FILE :
	              	$message_info = "Pas de fichier";
	              	break;
              	case UPLOAD_ERR_INI_SIZE :
              		$message_info = "Fichier trop gros";
                	break;
                case UPLOAD_ERR_FORM_SIZE :
                	$message_info = "Le fichier dépasse la taille authoriser, configurer dans PHP.INI";
                	break;
                case UPLOAD_ERR_PARTIAL :
                	$message_info = "Fichier non transféré";
                	break;
                case UPLOAD_ERR_NO_TMP_DIR :
                	$message_info = "PAs de dossier temporaire";
                	break;
                case UPLOAD_ERR_CANT_WRITE :
                	$message_info = "Errure pendant l'écriture du fichier";
                	break;
                case UPLOAD_ERR_EXTENSION :
                	$message = "Mauvaise extension";
                	break;
                default :
                	$message_info = "Erreur inconnue";
                	break;
              }
       }
Je n'arrive pas a faire passer mes extensions, qui pourrait me dire ou je fait en le co.... :twisted: :wink:

D'avance merci

Posté : 29 avr. 2009, 20:34
par Sodams
Pourquoi as-tu un break dans le if?
 if (copy($fichier_temporaire,$destination))
{
    //-->Si copie OK.--// 
    $message_info  = "Transfert terminé - Fichier = ".$nom;
    break;
}
Alors que tu as un break juste après la fermeture du else.

Posté : 29 avr. 2009, 20:39
par Nagol
bien vu

le break; dans le if arrive deux fois étant donné que ton autre break est pas dans le else, donc le mieux serait de choisir, soit tu le met dans le if et dans le else, soit tu le met pour l'ensemble du case.

Posté : 29 avr. 2009, 20:46
par dunbar
Merci
Mais cela ne change pas mon soucis, il ne prend en compte mes extension il prend tout.

Posté : 29 avr. 2009, 20:52
par Nagol
cad, il prend tout?

Posté : 29 avr. 2009, 22:11
par dunbar
Toute les extensions.(il laisse tout passer)

Posté : 29 avr. 2009, 22:52
par AB
Ben c'est un peu normal.
Je vois pas où tu fais ta comparaison entre les extensions que tu autorises et l'extension du fichier...

Posté : 29 avr. 2009, 23:24
par Nagol
fectivement :)

Posté : 29 avr. 2009, 23:36
par AB
Ah oui pour le titre de ton message "UPLOAD_ERR_EXTENSION" c'est un truc gérer par le serveur donc cela m'étonnerait que tu puisses t'en servir pour faire un tri spécifique en php.

Par ailleurs "UPLOAD_ERR_FORM_SIZE : $message_info = "Le fichier dépasse la taille authoriser, configurer dans PHP.INI";
ce n'est pas le bon message puisque cela correspond à la taille autorisée par le formulaire.

Et puis tu ferais mieux d'enregistrer tes erreurs dans un tableau car il peut y en avoir plusieurs : $message_info[] = ...

Enfin si la taille post_max_size autorisée par le serveur est dépassée tu n'auras aucun message d'erreur car $_POST sera vide donc il faudra par exemple compléter par une variable $_GET envoyée en même temps que ton formulaire pour vérifier cette erreur. Il n'y a que dans le cas où upload_max_filesize est dépassé mais sans excéder post_max_size que le serveur te renverras un message d'erreur sur la taille maximale de fichier à ne pas dépasser.

D'ailleurs à ce sujet tu peux prévenir les visiteurs sur ces valeurs maximales en faisant afficher <?php echo ini_get('post_max_size').'o'?> et <?php echo ini_get('upload_max_filesize').'o'?>
Cela dit comme post_max_size est toujours >= à upload_max_filesize il n'y a que dans le cas d'upload multiples que l'info post_max_size est utile pour le visiteur

A part ça ou en est ce topic http://www.phpfrance.com/forums/viewtop ... ht=#288479 ? J'espère que tu as vu mon edit sinon ça sert à rien que ducros il se décarcasse :roll:

Posté : 29 avr. 2009, 23:55
par dunbar
Ah oui pour le titre de ton message "UPLOAD_ERR_EXTENSION" c'est un truc gérer par le serveur donc cela m'étonnerait que tu puisses t'en servir pour faire un tri spécifique en php.
Je pense que tu a raison mais je cherche encore :wink:
Mais je voulais faire un formulaire en utilisant uniquement les constant PHP
Par ailleurs "UPLOAD_ERR_FORM_SIZE : $message_info = "Le fichier dépasse la taille authoriser, configurer dans PHP.INI";
ce n'est pas le bon message puisque cela correspond à la taille autorisée par le formulaire.
Ok, j'ai été trop vite mais j'aurais corriger, je test encore pour l'instand :wink:
Et puis tu ferais mieux d'enregistrer tes erreurs dans un tableau car il peut y en avoir plusieurs : $message_info[] = ...
là par contre je suis pas d'accord, il va stopper a la premiere erreur :)
Enfin si la taille post_max_size autorisée par le serveur est dépassée tu n'auras aucun message d'erreur car $_POST sera vide donc il faudra par exemple compléter par une variable $_GET envoyée en même temps que ton formulaire pour vérifier cette erreur. Il n'y a que dans le cas où upload_max_filesize est dépassé mais sans excéder post_max_size que le serveur te renverras un message d'erreur sur la taille maximale de fichier à ne pas dépasser.
Euh non non
case UPLOAD_ERR_NO_FILE :
	              	$message_info = "Pas de fichier";
:wink:
A part ça ou en est ce topic http://www.phpfrance.com/forums/viewtop ... ht=#288479 ? J'espère que tu as vu mon edit sinon ça sert à rien que ducros il se décarcasse
Non je n'avais pas vu ton EDIT :oops: mais je trouve ta solution nickel je travaillais dans cette direction, mais je suis passer à l'upload pour chager d'idée :twisted: et surtout que mon fils me gonfle pour avoir sont forum.

Sincère merci de ton aide.

Posté : 30 avr. 2009, 00:42
par AB
Et puis tu ferais mieux d'enregistrer tes erreurs dans un tableau car il peut y en avoir plusieurs : $message_info[] = ...
là par contre je suis pas d'accord, il va stopper a la premiere erreur :)
Pas nécessairement, le fichier pourrait ne pas avoir la bonne extension (que tu autorises) et en même temps dépasser la taille de fichier maximum autorisée par le serveur... ou avoir eu un pb de téléchargement ou... En affichant toutes les erreurs en même temps tu évites au visiteur de tatonner et faire plusieurs essais.
Enfin si la taille post_max_size autorisée par le serveur est dépassée tu n'auras aucun message d'erreur car $_POST sera vide donc il faudra par exemple compléter par une variable $_GET envoyée en même temps que ton formulaire pour vérifier cette erreur. Il n'y a que dans le cas où upload_max_filesize est dépassé mais sans excéder post_max_size que le serveur te renverras un message d'erreur sur la taille maximale de fichier à ne pas dépasser.
Euh non non
case UPLOAD_ERR_NO_FILE :
	              	$message_info = "Pas de fichier";
:wink:
SI SI SI! Si $_POST est trop lourd, il devient vide et tu n'auras rien, nada comme erreur. Si ton post ne passe pas, $_FILES n'existe pas, pas plus que son gestionnaire d'erreur et tu risque d'avoir une belle page blanche. Enfin tu peux toujours essayer pour voir.

Mais pour revenir à ton pb d'extension, puisque tu récupères le type mime du fichier, tu pourrais peut-être le comparer au type mime que tu autorises, non ? Il te reste pas grand chose à faire, je te laisse bosser un peu. Mais la mauvaise piste est d'essayer d'utiliser UPLOAD_ERR_EXTENSION puisque à moins que tu configures le serveur toi-même, tu n'es pas maître de ce paramètre.