Page 1 sur 1
upload jpg refusé
Posté : 11 janv. 2007, 17:39
par wared
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?
Posté : 11 janv. 2007, 18:11
par Ryle
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" ?
Posté : 11 janv. 2007, 18:22
par wared
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.
Posté : 11 janv. 2007, 18:32
par wared
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
?>
Posté : 11 janv. 2007, 18:34
par wared
...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>
Posté : 11 janv. 2007, 19:22
par iclo
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
Posté : 11 janv. 2007, 19:36
par AB
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.
Posté : 11 janv. 2007, 19:40
par wared
Le print affiche ".jpg"
Les fichiers gif étaient correctement uploadés...
Posté : 11 janv. 2007, 19:56
par wared
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.
Posté : 11 janv. 2007, 20:08
par wared
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...
Posté : 11 janv. 2007, 20:13
par AB
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
Posté : 12 janv. 2007, 10:38
par Invité
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.

Posté : 12 janv. 2007, 11:40
par ma_pomme
ton extention est jpg ou JPG j'ai deja remarqué qu'avec les majuscules ça passait pas sur certains script

Posté : 12 janv. 2007, 11:56
par Ryle
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

Posté : 12 janv. 2007, 13:16
par AB
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
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
