UpLoad d'un Fichier en PHP

[Résolu/Fermé]
Signaler
Messages postés
1220
Date d'inscription
lundi 25 juin 2012
Statut
Membre
Dernière intervention
7 août 2014
-
Messages postés
1220
Date d'inscription
lundi 25 juin 2012
Statut
Membre
Dernière intervention
7 août 2014
-
Bonjour,

Je dois faire un upload de fichier en PHP.
J'ai suivis plusieurs tutos, tous sans succès.
( https://antoine-herault.developpez.com/tutoriels/php/upload/#L3.3 ) mais plus récemment celui-ci :
https://www.commentcamarche.net/faq/889-php-upload-de-fichiers

Voici mon code ( ce n'est qu'un copié collé/adapté, mais il ne fonctionne pas, je me casse la tête depuis des jours). Je précise que file_uploads est activé.


Page de choix de fichier :
<form method="post" action="reception.php" enctype="multipart/form-data">    
          <input type="hidden" name="MAX_FILE_SIZE" value="2097152">    
          <input type="file" name="nom_du_fichier">   
          <input type="submit" value="Envoyer">   
</form>


Page de reception :
<?php          
if ($_FILES['nom_du_fichier']['error']) {    
          switch ($_FILES['nom_du_fichier']['error']){    
                   case 1: // UPLOAD_ERR_INI_SIZE    
                   echo"Le fichier dépasse la limite autorisée par le serveur (fichier php.ini) !";    
                   break;    
                   case 2: // UPLOAD_ERR_FORM_SIZE    
                   echo "Le fichier dépasse la limite autorisée dans le formulaire HTML !";
                   break;    
                   case 3: // UPLOAD_ERR_PARTIAL    
                   echo "L'envoi du fichier a été interrompu pendant le transfert !";    
                   break;    
                   case 4: // UPLOAD_ERR_NO_FILE    
                   echo "Le fichier que vous avez envoyé a une taille nulle !";
                   break;    
          }    
}    
else {    
 // $_FILES['nom_du_fichier']['error'] vaut 0 soit UPLOAD_ERR_OK    
 // ce qui signifie qu'il n'y a eu aucune erreur
 echo 'erreur';
}    


if ((isset($_FILES['nom_du_fichier']['fichier'])&&($_FILES['nom_du_fichier']['error'] == UPLOAD_ERR_OK))) {    
$chemin_destination = '/mondossier/uploads/';    
move_uploaded_file($_FILES['nom_du_fichier']['tmp_name'], $chemin_destination.$_FILES['nom_du_fichier']['name']);    
}
else {
    echo 'erreur 2';
}
?> 

Le serveur me renvoit toujours erreur1 et erreur 2.
Donc il ne reconnait pas le fichier ( j'en ai testé plusieurs).

Quelqu'un voit l'erreur ?

Merci d'avance.

L.

4 réponses


Si j'en crois ton script, il n'affiche pas erreur1 mais erreur, car je ne vois pas de message "erreur1"
C'est bon signe, car tu affiches ça si ça va bien... C'est curieux, comme message, pour dire que ça va bien.

Quant à l'erreur2, c'est normal aussi. Tu testes isset($_FILES['nom_du_fichier']['fichier']) mais il n'y a aucun élément ['fichier'] dans $_FILES['nom_du_fichier']. Il y a ['name'], ['tmp_name'], ['error'], etc... mais pas ['fichier']
Messages postés
1220
Date d'inscription
lundi 25 juin 2012
Statut
Membre
Dernière intervention
7 août 2014
1 765
Oui, 'erreur' pas 'erreur1' désolé^^.
C'est juste pour dire que le script ne s'arrête pas là; si je le vois, c'est ok ( je le retire après).
Donc le script sur cette page est faux ?
La condition ci-dessous ne sera jamais vraie.
isset($_FILES['nom_du_fichier']['fichier'])

En revanche, la condition ci-dessous peut être utilisée :
isset($_FILES['nom_du_fichier']['tmp_name'])

Attention toutefois : souhaite-t-on écraser un précédent fichier s'il a le même nom que le nouveau fichier téléchargé ?
Messages postés
1220
Date d'inscription
lundi 25 juin 2012
Statut
Membre
Dernière intervention
7 août 2014
1 765
C'est la première fois que j'utilise l'upload en PHP (je crois que ça se voit).

Tu testes isset($_FILES['nom_du_fichier']['fichier']) mais il n'y a aucun élément ['fichier'] dans $_FILES['nom_du_fichier']. Il y a ['name'], ['tmp_name'], ['error'], etc... mais pas ['fichier']

Qu'est ce que ['fichier'] dans le script ?

Qu'est ce que ['fichier'] dans le script ?
Tu poses cette question, mais ce serait plutôt à nous de te la poser, c'est toi qui l'as écrit, ce 'fichier'. Et justement, il n'existe pas. Donc, comme nous te l'avons dit A.Nonymous et moi, le test isset($_FILES['nom_du_fichier']['fichier']) va toujours te rendre false.
Suis le conseil de A.Nonymous, et remplace ce test d'existence par le test de quelque chose qui existe vraiment, comme isset($_FILES['nom_du_fichier']['tmp_name'])
Messages postés
1220
Date d'inscription
lundi 25 juin 2012
Statut
Membre
Dernière intervention
7 août 2014
1 765
c'est toi qui l'as écrit, ce 'fichier'.
Non non, je l'ai copié d'ici, j'arrête pas de le dire :P

C'est parfait.
Je viens de corriger
isset($_FILES['nom_du_fichier']['fichier']) 

par
if ((isset($_FILES['nom_du_fichier']['tmp_name'])

et cela fonctionne parfaitement.

Je peux donc dire qu'il y a une erreur dans le tuto de CCM ;-)

Merci :-)
Utilisateur anonyme
j'arrête pas de le dire :P
Excuse-moi. Tu as bien fait de le répéter, j'avoue que je n'y avais pas fait attention.
Bonne continuation
Messages postés
1220
Date d'inscription
lundi 25 juin 2012
Statut
Membre
Dernière intervention
7 août 2014
1 765
PAs de soucis, merci encore ;-)

(paraît que tu es mis à l'honneur ici ... ;-) ).
Utilisateur anonyme
Nous avons eu la même idée. Mais au lieu de créer un nouveau fil, je l'ai mis dans un fil consacré aux erreurs:

Merci pour l'honneur :-)
Messages postés
1220
Date d'inscription
lundi 25 juin 2012
Statut
Membre
Dernière intervention
7 août 2014
1 765
Ah. Je ne connaissais pas ce fil ( que je suis désormais).

Thanks ;-)