Uploader un fichier en php

Résolu
Bonjour, a vous tous
Je suis actuellement entrain de développer un site en PHP à l'aide de la plateforme wamp server .

Cela fait un moment que j'essaye de uploader un fichier texte (.doc, .odt, .xls, .ppt, ...) et l'insérer dans mon serveur mais en vain .

Quelqu'un aurait une idée ?
voici mon code :
HTML :
<form enctype="multipart/form-data" action="test2.php" method="post">

<!-- MAX_FILE_SIZE doit précéder le champs input de type file -->

<input type="hidden" name="MAX_FILE_SIZE" value="100000" />

<!-- Le nom de l'élément input détermine le nom dans le tableau $_FILES -->

Envoyez ce fichier : <input name="fichier" type="file" />

<input type="submit" value="Envoyer le fichier" />

</form>
pour le script en php:
<?php
$id_connex=mysql_connect("localhost","root","") or die("Connexion impossible");
mysql_query("use ONDA");
$content_dir = 'C:\wamp\www\ONDA\communication-QT1\.';

$tmp_file = $_FILES['fichier']['tmp_name'];
$test=$_FILES['fichier']['name'];

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

$name_file = $_FILES['fichier']['name'];

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

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

echo "<pre>";
print_r($_FILES);
echo "</pre>"
?>
le problème c'est que j'ai toujours le else seulement qui s'execute : le fichier est introuvable

veuillez m'aidez s'il vous plait si vous avez une idée sur l'erreur que j'avais commis

23 réponses

Résumé de la discussion

Une difficulté d'upload de fichier sous PHP sur WAMP est constatée lorsque le script renvoie systématiquement que le fichier est introuvable malgré l'envoi via un formulaire multipart. Les échanges suggèrent de vérifier les contraintes PHP d'upload, l'utilisation de $_FILES et is_uploaded_file, et d'examiner le chemin de destination et les permissions, notamment via move_uploaded_file. Les réponses recommandent aussi de tester avec phpinfo pour vérifier les paramètres 'upload_max_filesize' et 'post_max_size', de supprimer ou d'ajuster MAX_FILE_SIZE, et d'utiliser un fichier plus petit pour diagnostiquer. D'autres conseils évoquent le fait que $_FILES peut être vide si l'envoi ne passe pas, et proposent d'afficher var_dump($_FILES) pour identifier l'absence ou l'erreur upload spécifique.

Bobot (l’IA à votre service)
  1. Bonjour

    Tu as limité la taille du téléchargement à 100k, es-tu bien sûr de ne pas essayer de fichier plus gros ?
    As-tu essayé d'afficher le code d'erreur $_FILES['fichier']['error'] ?
    1. Bonsoir ,
      toujours même problème j'ai changée mon code en cela :
      <?php
      $id_connex=mysql_connect("localhost","root","") or die("Connexion impossible");
      mysql_query("use ONDA");
      $content_dir = 'C:\wamp\www\ONDA\communication-QT1\.';

      $tmp_file = $_FILES['fichier']['tmp_name'];
      $test=$_FILES['fichier']['name'];

      if( !is_uploaded_file($tmp_file) )
      {
      echo ($_FILES['fichier']['error'] );
      exit ("Le fichier est introuvable" );

      }

      $name_file = $_FILES['fichier']['name'];

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

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

      echo "<pre>";
      print_r($_FILES);
      echo "</pre>"
      ?>
      et Pour l'html j'ai enlevée le value= mais sans résultat
      il ne m'affiche pas le code d'erreur même si j'ai ajoutée l'echo !!
      1. Ça affiche "Le fichier est introuvable" sans afficher de code d'erreur ? C'est peut-être simplement que $_FILES['fichier'] n'est pas défini.
        Ajoute
        var_dump($_FILES);  
        au début de ton script
        1. que fait ce point à la fin de :$content_dir = 'C:\wamp\www\ONDA\communication-QT1\. ?

          essayes comme celà:
          <?php
          $id_connex=mysql_connect("localhost","root","") or die("Connexion impossible");
          mysql_query("use ONDA");
          $content_dir = 'C:\wamp\www\ONDA\communication-QT1\.';
          
          $tmp_file = $_FILES['fichier']['tmp_name'];
          $name_file = $_FILES['fichier']['name'];
          
          if( is_uploaded_file($tmp_file) )
          {
          	if( move_uploaded_file($tmp_file, $content_dir . $name_file) ){
          		echo "Le fichier <b>$name_file</b> a bien été uploadé"
          	}else{
          		echo "Impossible de copier le fichier <b>$name_file</b> dans <b>$content_dir</b>";
          		
          		
          	}
          }else{
          	echo $_FILES['fichier']['error'];;
          }
          ?> 
          1. C'est vrai que le point à la fin de $content_dir est sûrement une erreur, mais elle ne devrait provooquer un problème qu'à partir du move_uploaded_file, pas dès le if( !is_uploaded_file($tmp_file) ).
            Je n'ai pas bien compris ce qui a changé entre le script de njimer et le tien, à part un peu de mise en forme, les mêmes fonctions sont appelées dans le même ordre. Tu as même laissé le point à la fin de $content_dir.
        2. je ne me suis rendu compte de la présence du point et rajouté la remarque qu'après avoir refait et copie /collé le code

          perso je préfère tester en positif plutôt qu'en négatif
          on a toujours de surprises
          1. Bonjour
            si j'enlève le point qui se trouve a la fin du chemin j'ai le message d'erreur qui s'affiche :

            Parse error: syntax error, unexpected T_STRING in C:\wamp\www\ONDA\upload1.php on line 6
            1. Je ne sais pas où tu as retiré un point, mais sans doute pas là où Alain_42 te l'avait dit, car sa remarque était justifiée et retirer le point qu'il t'a indiqué ne peut pas avoir provoqué cette erreur. On pourra en reparler plus tard.
          2. Et lorsque j'ai ajoutée la fonction :
            var_dump($_FILES); ça m'affiche :
            array(0) { }
            dans la page upload1.php
            1. si $_FILES est vide, c'est que tu n'as rien téléchargé du tout... Ça n'est même pas arrivé jusqu'à ton script, ton traitement n'y peut rien.
              Tu n'aurais pas essayé avec un fichier trop gros par hasard ? essaye de charger un petit fichier court (<100k)
              1. Ton formulaire dit action="test2.php" et toi tu nous parles de upload1.php...
                Ça n'est pas très cohérent. Tu as modifié ton formulaire ?
              2. oui j'avais modifier le formulaire ou j'avais enlever le value (représentant la taille du fichier)
            2. j'avais modifier le formulaire
              Peux-tu montrer ton formuliare modifié ?
              1. d'accord le voici :

                <form method="POST" action="upload1.php" enctype="multipart/form-data">
                <!-- On limite le fichier à 100Ko -->
                <input type="hidden" name="MAX_FILE_SIZE">
                Fichier : <input type="file" name="userfile" value="">
                <input type="submit" name="envoyer" value="Envoyer le fichier">
                </form>
                1. plutot :
                  d'accord le voici :

                  <form method="POST" action="upload1.php" enctype="multipart/form-data">
                  <!-- On limite le fichier à 100Ko -->
                  <input type="hidden" name="MAX_FILE_SIZE">
                  Fichier : <input type="file" name="userfile" >
                  <input type="submit" name="envoyer" value="Envoyer le fichier">
                  </form>
                  1. non j'ai enlevée le value pour ne pas avoir la contrainte de la taille
                    1. <form method="POST" action="upload1.php" enctype="multipart/form-data">
                      Fichier : <input type="file" name="userfile" >
                      <input type="submit" name="envoyer" value="Envoyer le fichier">
                      </form>
                      1. Pour être plus explicite : enlève complètement la ligne <input type="hidden" name="MAX_FILE_SIZE">
                        De plus, je vois que tu as changé le nom du fichier pour 'userfile' au lieu de 'fichier'. Quel intérêt ? Mis à part de t'obliger à modifier partout ton script qui reçoit le fichier ?
                        1. <form method="POST" action="upload1.php" enctype="multipart/form-data">
                          Fichier : <input type="file" name="fichier" >
                          <input type="submit" name="envoyer" value="Envoyer le fichier">
                          </form>
                          même si le meme message s'affiche :
                          array(0) { }
                          1. J'ai copié-collé ton script et la seule manière que j'ai trouvée pour reproduire ton défaut, c'est d'envoyer un fichier trop gros. Je t'ai dit à plusieurs reprises d'essayer avec un fichier pas trop gros.
                            Quelle est la taille du fichier que tu essayes de télécharger ?
                            1. la taille de mon fichier est de 78 ko
                              ça reste toujours la contrainte de taille même si j'ai enlevée le input ??
                              1. Normalement, 78ko ça passe. Il y a bien une contrainte dans la configuration de php, mais elle n'est certainement pas si bas que ça.
                                Peux-tu mettre phpinfo(); au début de ton script pour voir ta version de php et son paramétrage ? il y en a un paquet, fais une recherche sur le mot upload.
                                1. justement puisque tous les fonctions utilisées ils sont écrites par une couleur standard normalement si ils sont connus par php ils seront écrites en bleu .
                                  pour la version de mon php c'est PHP Version 5.2.1 j'ai pas compris qu'est ce que vous voulez dire par il y en a un paquet , fais une recherche sur le mot upload ??
                                  • 1
                                  • 2

                                  Discussions similaires

                                  question pix mot caché

                                  7 réponses