upload jpg refusé

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : upload jpg refusé

par AB » 12 janv. 2007, 13:16

Copie - colle l'intégralité de ce code dans une page vierge puis mets la sur le serveur free

Code : Tout sélectionner

<?php //on vérifies que le champ est bien rempli: if(!empty($_FILES["fichier_choisi"]["name"])) { $extension = strtolower(strrchr($_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: $real = (substr($_SERVER['DOCUMENT_ROOT'],-1) == '/')? $_SERVER['DOCUMENT_ROOT'] : $_SERVER['DOCUMENT_ROOT'].'/' ; $rep = 'ton_répertoire_distant'; $chemin = $real.$rep.'/' ; if($extension == '.png' || $extension == '.gif' || $extension == '.jpg' || $extension == '.jpeg'){ if(move_uploaded_file($nomTemporaire, $chemin.$nomFichier)) echo("<br>l'upload a réussi") ; else echo("<br>l'upload a échoué") ; } else { echo("<br>fichiers acceptés : png, jpg, jpeg, gif") ; } }//fin if else { echo("Vous n'avez pas choisit de fichier!!<br>") ; }//fin else ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title>Document sans nom</title> </head> <body> <form enctype="multipart/form-data" action="<?php echo $_SERVER['PHP_SELF'] ?>" method="post"> Envoyez ce fichier : <input name="fichier_choisi" type="file" /> <input type="submit" value="Envoyer le fichier" /> </form> </body> </html>
wared, le code que je t'avais donné est le tiens dont j'avais corrigé le minimum pour que cela marche (j'avais testé).
Il manquait quelques corrections pour que cela marche dans tous les cas, je viens de m'en apercevoir.


Corrections:
- j'ai rajouté le strtolower pour que tu puisses indifféremment rentrer jpg JPG jpeg JPEG ...etc.
- j'ai supprimé la ligne html

Code : Tout sélectionner

<input type="hidden" name="MAX_FILE_SIZE" value="30000" />
qui limitait la taille de l'upload de tes fichiers à 30 ko !!! ce qui explique sans doute tes problèmes : le fichier gif que tu testais devait faire moins de 30 ko et le jpg devait faire plus, tout simplement.

EDIT :
dans la variable $rep , indiques le nom du répertoire où tu souhaites que tes photos soient téléchargées.
Sauf catastrophe, tu devrais pouvoir cliquer sur 'résolu' d'ici peu de temps :wink:

par Ryle » 12 janv. 2007, 11:56

Dans celui proposé par Flood il y a un strToLower pour éviter le problème de casse, c'est vrai qu'il manque dans le script d'AB, mais à priori ça ne passait déjà pas dans le premier cas

Le code php est placé juste après la balise ouvrante body(c'est correct?).
Ca importe pas vraiment, le code php sera exécuté avant le code html... En général pour éviter les problèmes de redirection avec des header, on va plus généralement mettre le code php tout au début de la page. Ainsi on peut, si nécessaire, faire des redirections en php, alors que dès le moment que l'on a envoyé du code au navigateur, celles-ci ne sont plus possible :)

Pour la version de php (mais je ne pense pas que cela vienne de là) il te suffit de faire appel à la fonction phpinfo() dans un de tes script et tu auras toutes les infos relatives au serveur :)


Quand tu dis que ca ne fonctionne toujours pas avec les jpg, j'en déduis que le fichier n'est pas sur le serveur, mais as-tu un message d'erreur ? vois tu l'un des messages : "l'upload a réussi" ou "l'upload a échoué" ?
ou bien "fichiers acceptés : png, jpg, gif" ?

Colle des echo de temps à autre pour vérifier s'il rentre bien dans les if() et voir par où il passe :)

par ma_pomme » 12 janv. 2007, 11:40

ton extention est jpg ou JPG j'ai deja remarqué qu'avec les majuscules ça passait pas sur certains script :wink:

par Invité » 12 janv. 2007, 10:38

Salut,

Je suis désolé... j'en suis toujours au même point.
J'ai suivi tes indications et j'ai copier/coller ton code
php et html dans une même page. Le code php est placé
juste après la balise ouvrante body(c'est correct?).
Les gif => ok
Les jpg => ne passent pas.

:cry:

par AB » 11 janv. 2007, 20:13

wared,

1/Dans une même page, tu mets le code PHP et HTML que je t'ai indiqué plus haut.
2/Ensuite tu teste chez free, ça devrait marcher puisque je l'ai testé chez free.
3/Ensuite tu fais les modifs que tu veux.

EDIT et n'oublies pas:
dans la variable $rep , indiques le nom de ton répertoire où tu souhaites que tes photos soient téléchargées ex : photo
EDIT2 Je viens de supprimer l'affichage du chemin (que je faisais pour vérification) dans le code html

par wared » 11 janv. 2007, 20:08

Je me demande si ça peut être dû à la version de php employée.
Par contre je ne vois pas ou elle peut bien être mentionnée?
Il suffit de rajouter un chiffre dans l'extension? (fichier.php3 par ex?)
Et je ne comprends toujours pas pourquoi mon script fonctionne pour
les gif et pas pour les jpg...

par wared » 11 janv. 2007, 19:56

Mon code php est placé sur un fichier externe : "parcourir.php"
Je me suis trompé, "$chemin" est inutile car les deux fichiers sont
placés dans le même répertoire.
J'en suis toujours au même point malheureusement.
Merci quand même.

EDIT : J'édite mon code tout de suite.

par wared » 11 janv. 2007, 19:40

Le print affiche ".jpg"
Les fichiers gif étaient correctement uploadés...

par AB » 11 janv. 2007, 19:36

Ton code corrigé et testé chez free:

dans la variable $rep , indiques le nom de ton répertoire ex : photo
<?php

    //on vérifies que le champ est bien rempli:
    if(!empty($_FILES["fichier_choisi"]["name"]))
    {
        $extension = strrchr($_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:
		$real = (substr($_SERVER['DOCUMENT_ROOT'],-1) == '/')? $_SERVER['DOCUMENT_ROOT'] : $_SERVER['DOCUMENT_ROOT'].'/' ;
		$rep = 'ton_répertoire';
		
        $chemin = $real.$rep.'/' ;
     
     
         if($extension=='.png' || $extension=='.gif' || $extension=='.jpg'){
            if(move_uploaded_file($nomTemporaire, $chemin.$nomFichier))
                echo("<br>l'upload a réussi") ;
            else
                echo("<br>l'upload a échoué") ;
        }
        else
        {
            echo("<br>fichiers acceptés : png, jpg, gif") ;
        }
    }//fin if
    else
    {
        echo("Vous n'avez pas choisit de fichier!!<br>") ;
    }//fin else
    
?> 
ton code html corrigé

Code : Tout sélectionner

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title>Document sans nom</title> </head> <body> <form enctype="multipart/form-data" action="<?php echo $_SERVER['PHP_SELF'] ?>" method="post"> <input type="hidden" name="MAX_FILE_SIZE" value="30000" /> Envoyez ce fichier : <input name="fichier_choisi" type="file" /> <input type="submit" value="Envoyer le fichier" /> </form> </body> </html>
Je te laisse un peu chercher pour comprendre les corrections

EDIT: ton code précédent ne pouvais rien uploader, pas même des fichiers gif
EDIT 2 : wared, penses à cliquer sur "résolu" si ça marche et que tu as compris pourquoi.

par iclo » 11 janv. 2007, 19:22

Fais un print de $extension pour voir ce qui est réellement utilisé dans la triple comparaison.
Ca te permettra d'isoler un peu le problème

par wared » 11 janv. 2007, 18:34

...et le code du formulaire html :

Code : Tout sélectionner

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title>Document sans nom</title> </head> <body> <form enctype="multipart/form-data" action="parcourir.php" method="post"> <input type="hidden" name="MAX_FILE_SIZE" value="30000" /> Envoyez ce fichier : <input name="fichier_choisi" type="file" /> <input type="submit" value="Envoyer le fichier" /> </form> </body> </html>

par wared » 11 janv. 2007, 18:32

Voici le code php(si vous faites le test, n'oubliez pas de spécifier une url pour la variable $chemin) :
<?php

	//on vérifies que le champ est bien rempli:
	if(!empty($_FILES["fichier_choisi"]["name"]))
	{
		$extension = strrchr($_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"] ;
	 
	 	if($extension=='.png' || $extension=='.gif' || $extension=='.jpg'){
			if(move_uploaded_file($nomTemporaire, $nomFichier))
				echo("<br>l'upload a réussi") ;
			else
				echo("<br>l'upload a échoué") ;
		}
		else
		{
			echo("<br>fichiers acceptés : png, jpg, gif") ;
		}
	}//fin if
	else
	{
		echo("Vous n'avez pas choisit de fichier!!<br>") ;
	}//fin else
	
?>

par wared » 11 janv. 2007, 18:22

Salut,
Oui c'est bien ".jpg"...
J'ai essayé avec "move_uploaded_file" et "copy",
mais je me doutais que ça ne changerai rien...
et j'ai testé plusieurs jpg.
Ce n'est pas un problème de poids non plus.
Je fais des recherches mais je n'ai trouvé personne
ayant eu le même problème pour l'instant.

par Ryle » 11 janv. 2007, 18:11

A priori non.. y a pas vraiment de raison pour qu'il fasse de ségrégation comme ça :)

Ton fichier a bien l'extension ".jpg" et pas ".jpeg" ?

upload jpg refusé

par wared » 11 janv. 2007, 17:39

Salut,

J'ai suivi ce tuto:
http://www.phpfrance.com/forums/voir_sujet-545.php

Cependant je parviens à uploader des .gif
mais pas de .jpg.
Mon serveur est chez free, et le code est
en tout point identique à celui là.
Vous êtes vous déjà heurté à ce genre de problème?