Aide upload de fichier PHP

Résolu/Fermé
Loola - 29 mai 2008 à 10:00
vlmath Messages postés 794 Date d'inscription vendredi 20 octobre 2006 Statut Contributeur Dernière intervention 4 septembre 2011 - 6 juin 2008 à 11:20
Bonjour tout le monde!!

Voila je cherche à faire un upload de fichier par php, j'ai regardé sur internet, piqué des bout de codes à droite, à gauche et j'arrive à ça:

[quote]<?php
$dossier = 'upload/';
$fichier = basename($_FILES['photo']['name']);
$taille_maxi = 2000000;
$taille = filesize($_FILES['photo']['tmp_name']);
$extensions = array('.png', '.gif', '.jpg', '.jpeg');
$extension = strrchr($_FILES['photo']['name'], '.');
//Début des vérifications de sécurité...
if(!in_array($extension, $extensions)) //Si l'extension n'est pas dans le tableau
{
$erreur = 'Vous devez uploader un fichier de type png, gif, jpg, jpeg, txt ou doc...';
}
if($taille>$taille_maxi)
{
$erreur = 'Le fichier est trop gros...';
}
if(!isset($erreur)) //S'il n'y a pas d'erreur, on upload
{
if(move_uploaded_file($_FILES['avatar']['tmp_name'], $dossier . $fichier)) //Si la fonction renvoie TRUE, c'est que ça a fonctionné...
{
echo 'Upload effectué avec succès !';
}
else //Sinon (la fonction renvoie FALSE).
{
echo 'Echec de l\'upload !';
}
}
else
{
echo $erreur;
}
?>/quote

Le problème c'est que je 'narrive pas à upload, je rentre toujours dans le dernier "else" qui est l'echec de l'upload.

Perso j'ai un doute sur la ligne : if(move_uploaded_file($_FILES['avatar']['tmp_name'], $dossier . $fichier))
mais comme je la comprend pas entierement, je peux pas trop me prononcer.

Merci d'avance à ceux qui pourront m'aider!
A voir également:

22 réponses

vlmath Messages postés 794 Date d'inscription vendredi 20 octobre 2006 Statut Contributeur Dernière intervention 4 septembre 2011 160
29 mai 2008 à 10:32
Salut,

L'erreur vient du fait que t'as piqué des bout de codes de différents sites, et ils n'ont pas les mêmes noms de variable ...

Tu dois remplacer
$_FILES['avatar']['tmp_name'], $dossier . $fichier)
par
$_FILES['photo']['tmp_name'], $dossier . $fichier)


Il ne faut pas oublier que "photo" est le nom du champ de type FILE qui se trouve dans ton formulaire d'upload (comme est un tableau, il doit en réalité s'appeler photo[] ...)

@Bientôt
0
Merci pour ta réponse, mais ça ne marche quand meme pas .. :s

Je débute en php et la je suis face à un vrai problème ... :s

Peux tu m'aider stp?
0
vlmath Messages postés 794 Date d'inscription vendredi 20 octobre 2006 Statut Contributeur Dernière intervention 4 septembre 2011 160
30 mai 2008 à 13:23
Est-ce que tu pourrais me copier tout le script, avec la page du formulaire ?
0
Voici le formulaire:


<form name="frm_1" method="POST" ENCTYPE="multipart/form-data" action="trait.php">
<table class="tab">

<tr><td>   </td><td>   </td></tr>
<tr>
<td>Année:</td><td><input type="text" name="Annee"></td>
<tr><td>   </td><td>   </td></tr>
<tr>
<td>Vainqueur:</td><td><input type="text" name="Vainqueur"></td>
</tr>
<tr><td>   </td><td>   </td></tr>
<tr>
<td>Pays du vainqueur:</td><td><input type="text" name="PaysV"></td>
</tr>
<tr><td>   </td><td>   </td></tr>
<tr>
<td>Finaliste:</td><td><input type="text" name="Finaliste"></td>
</tr>
<tr><td>   </td><td>   </td></tr>
<tr>
<td>Pays du finaliste:</td><td><input type="text" name="PaysF"></td>
</tr>
<tr><td>   </td><td>   </td></tr>
<tr>
<td>Sexe:</td><td>Garçon:<input type="radio" name="Sexe" value="M"></td><td>Fille:<input type="radio" name="Sexe" value="F"></td>
<tr><td>   </td><td>   </td></tr>
<tr><td> Photo: </td><td> <input type="file" name="photo"></td></tr>
<tr><td>   </td><td>   </td></tr>
<tr>
<td><input type="submit" name="upload" value="Valider"></td>
</tr>
<tr><td>   </td><td>   </td></tr>
<input type="hidden" name="choix" value="1">
</table>
</form>




Et voici le traitement php sur l'autre page:

<?php
$dossier = 'upload/';
$fichier = basename($_FILES['photo']['name']);
$taille_maxi = 2000000;
$taille = filesize($_FILES['photo']['tmp_name']);
$extensions = array('.png', '.gif', '.jpg', '.jpeg');
$extension = strrchr($_FILES['photo']['name'], '.');
//Début des vérifications de sécurité...
if(!in_array($extension, $extensions)) //Si l'extension n'est pas dans le tableau
{
$erreur = 'Vous devez uploader un fichier de type png, gif, jpg, jpeg, txt ou doc...';
}
if($taille>$taille_maxi)
{
$erreur = 'Le fichier est trop gros...';
}
if(!isset($erreur)) //S'il n'y a pas d'erreur, on upload
{
if(move_uploaded_file($_FILES['photo']['tmp_name'], $dossier . $fichier)) //Si la fonction renvoie TRUE, c'est que ça a fonctionné...
{
echo 'Upload effectué avec succès !';
}
else //Sinon (la fonction renvoie FALSE).
{
echo 'Echec de l\'upload !';
}
}
else
{
echo $erreur;
}
?>



Et j'en ai trouvé un autre sur un site que j'essai aussi dis moi lequel tu pense que ce soit le mieux:


<?php

if( isset($_POST['upload']) ) // si formulaire soumis
{
$content_dir = 'upload/'; // dossier où sera déplacé le fichier

$tmp_file = $_FILES['photo']['tmp_name'];

if( !is_uploaded_file($tmp_file) )
{
exit("Le fichier est introuvable");
echo "1";
}

// on vérifie maintenant l'extension
$type_file = $_FILES['photo']['type'];

if( !strstr($type_file, 'jpg') && !strstr($type_file, 'jpeg') && !strstr($type_file, 'bmp') && !strstr($type_file, 'gif') )
{
exit("Le fichier n'est pas une image");
echo "2";
}

// on copie le fichier dans le dossier de destination
$name_file = $_FILES['photo']['name'];

if( !move_uploaded_file($tmp_file, $content_dir . $name_file) )
{
exit("Impossible de copier le fichier dans $content_dir");
echo "3";
}

echo "Le fichier a bien été uploadé";
}

?>


J'attends ac impatience vos réponses!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
vlmath Messages postés 794 Date d'inscription vendredi 20 octobre 2006 Statut Contributeur Dernière intervention 4 septembre 2011 160
30 mai 2008 à 19:18
Ok, merci, je vias voir ça ....
0
vlmath Messages postés 794 Date d'inscription vendredi 20 octobre 2006 Statut Contributeur Dernière intervention 4 septembre 2011 160
30 mai 2008 à 20:47
C'est bisard ... les deux scripts vont parfaitement chez moi ...

T'as quoi exactement comme erreur ? Une de la part de PHP ou une que t'as créer toi-même ?

Personnellement, je préfère le deuxième (composition du code), mais c'est perso ... le résultat sera le même ...
0
Pour l'instant je met mon site en place sous Wamp et il me renvoie cette erreur:


Warning: move_uploaded_file(upload/Fond.JPG) [function.move-uploaded-file]: failed to open stream: No such file or directory in C:\wamp\www\Stage\test.php on line 27

Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move 'C:\wamp\tmp\php2B.tmp' to 'upload/Fond.JPG' in C:\wamp\www\Stage\test.php on line 27
Impossible de copier le fichier dans upload/

Je comprends pas trop si sa vient de Wamp ou de mon code :s
0
vlmath Messages postés 794 Date d'inscription vendredi 20 octobre 2006 Statut Contributeur Dernière intervention 4 septembre 2011 160
2 juin 2008 à 12:27
J'ai la même erreur seulement si je met un dossier de destination qui n'existe pas ...
Est-ce qu'il existe ? Si oui, est-t-il libre en écriture ?
0
ha non c'est peut etre parce qu'il n'existe pas. Je vais le créer et essayer et je te reponds après!

Merci
0
ça marche!!!

Merci beaucoup, je ne pensai pas que sa puisse etre une erreur aussi ridicule ^^

En tout cas merci beaucoup de ton aide!!
0
J'ai encore un petit problème lié à l'upload.

Je voudrais renommer automaitiquement le fichier uploader par les variables $année et $sexe concaténée.

J'ai donc essayer plusieurs solution, que j'ai cherché sur internet mais je n'y arrive pas, peut importe ce que je fasse, le fichier garde le meme nom ... :s

Peux tu m'aider une derniere fois stp?
0
vlmath Messages postés 794 Date d'inscription vendredi 20 octobre 2006 Statut Contributeur Dernière intervention 4 septembre 2011 160
2 juin 2008 à 18:16
Mais c'est tout normal que je partage mes connaissances ... ;D

Pour le renommage, t'as essayé la fonction rename ?
0
Merci encore pour ces info, ça marche niquel!

Maintenant si tu pouvais m'aider pour la suppression de fichier sur un ftp, sa seré super sympa ^^

Merci encore
0
vlmath Messages postés 794 Date d'inscription vendredi 20 octobre 2006 Statut Contributeur Dernière intervention 4 septembre 2011 160
4 juin 2008 à 11:47
T'as la fonction ftp_delete qui te fait ça : manuel ici.
0
Le probleme c'est que je n'ai pas encore mon serveur, et donc que je ne peux pas ctester cette fonction sous WAMP ou alors je ne sais pas le faire ... :s

J'avais lu un truc sur un forum qui été plutot du genre :

<?php
$Fnm = "/Upload/fichier_à_supprimer.qqchose";
unlink($Fnm);
echo 'fichier supprimé';
?>

Mais malheureusement je n'arrive pas à faire fonctionner cette fonction :s
0
vlmath Messages postés 794 Date d'inscription vendredi 20 octobre 2006 Statut Contributeur Dernière intervention 4 septembre 2011 160
4 juin 2008 à 19:15
Il te donne quoi comme erreur ?

T'es sur que t'as tous les droits sur le ficher ?
0
Sa me met ça comme erreur :

Warning: unlink(/Upload/icone.jpg) [function.unlink]: No such file or directory in C:\wamp\www\Stage\test.php on line 5
fichier supprimé

Je pense avoir tous les droits sur le fichier, puisque je suis en local, en admin, et que le fichier, s'en est un que j'ai mis grace au formulaire de "upload"
0
vlmath Messages postés 794 Date d'inscription vendredi 20 octobre 2006 Statut Contributeur Dernière intervention 4 septembre 2011 160
6 juin 2008 à 10:44
Il faut faire attention à un truc ... Apache est sensible à la casse, c'est à dire aux majuscules et aux minuscules.

Avant, dans ton script, t'as mis "upload", et là t'as mis "Upload".

Encore un petit truc, au lieu de mettre
$Fnm = "/Upload/fichier_à_supprimer.qqchose";<code>, mets plutôt <code>$Fnm = "./Upload/fichier_à_supprimer.qqchose";


Le . sert à lui dire que tu parts depuis le dossier où est exécuté le script.
0
D'accord je vais essayer sa, mais pk pense tu qu'il vaut mieu mettre un point devant le 1er / ??
0
vlmath Messages postés 794 Date d'inscription vendredi 20 octobre 2006 Statut Contributeur Dernière intervention 4 septembre 2011 160
6 juin 2008 à 11:18
Pour certains systèmes, tel que unix, il y a une grande différence. Pour Wamp, je ne sais pas s'il accepte sans, mais c'est plus propre de faire avec.
0