Probleme sur un script php (upload)

Bonjour,
une erreur ligne 106

// Ensuite, on copie le fichier uploadé ou bon nous semble.
				$uploadOk = move_uploaded_file($nomTemporaire, $DESTINATION_FOLDER.$nomFichier);


merci
Configuration: Windows XP
Firefox 2.0.0.11

23 réponses

  • Votes
  • Date
  • Date décroissante
  1. L'erreur venait de la ligne
    $dest_dossier = '/up/';
    


    Cela indique que le dossier destination est à la racine du serveur (alors que toi tu veux sans doute que ce soit à la racine du site)... Il faut donc changer pour 'up/'.

    et puis du fait que tu utilisais mal le fichier $_FILES (pour savoir exactement ce qu'il contient, fais print_r($_FILES) et tu verras sa structure exacte).

    Bon, pour que ça marche, je l'ai installé et fait marcher, et j'ai changé des trucs à droite à gauche, je ne peux pas te dire de tête si c'est bloquant ou pas.

    Donc je te mets le code (qui marche) :

    
    <?php
    
    if(!isset($_FILES['up'])) {
            header('Location: form.html');
            exit();
    }
    
    // params
    unset($erreur);
    $extensions_ok = array('png', 'gif', 'jpg', 'jpeg');
    $taille_max = 100000;
    $dest_dossier = 'up/';
    // utilisez également des slashes sous windows : $dest_dossier = '/up//up/';
    // vérifications
    if( !preg_match('/\.'.join('|', $extensions_ok).'\Z/', $_FILES['up']['name']) ) {
            $erreur = 'Veuillez sélectionner un fichier de type png, gif ou jpg !';
    } elseif( file_exists($_FILES['up']['tmp_name'])
                    and filesize($_FILES['up']['tmp_name']) > $taille_max) {
            $erreur = 'Votre fichier doit faire moins de 500Ko !';
    }
    // copie du fichier
    if(!isset($erreur))
    {
            $dest_fichier = basename($_FILES['up']['name']);
            echo "fichier destination : ",$dest_fichier, "<br/>";
            // formatage nom fichier
            // enlever les accents
    	$dest_fichier = strtr($dest_fichier,
    		'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ',
    
    		'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
    
            // remplacer les caracteres autres que lettres, chiffres et point par _
            $dest_fichier = preg_replace('/([^.a-z0-9]+)/i', '_', $dest_fichier);
            // copie du fichier
            move_uploaded_file($_FILES['up']['tmp_name'], $dest_dossier . $dest_fichier);
    }
    
    
    ?>
    
    Il s'est produit une erreur : <?=$erreur ?>
    


    Bon, j'ai pas fait dans la dentelle, il indique toujours qu'il y a eu une erreur. Quand celle-ci est vide, c'est qu'il n'y a pas d'erreur... ;-)

    Raph
    1. j ai remodifier le formulaire (form.html) comme ceci :

      <!-- Formulaire -->
      
            <!-- Attention, ne de ne pas oublier le enctype="multipart/form-data" -->
        
            <form method="POST" action="upload.php" enctype="multipart/form-data">
      
            <!-- Limiter la taille des fichiers à 500Ko -->
      
            <input type="hidden" name="MAX_FILE_SIZE" value="500000" />
        
            <fieldset>
      
            <legend><font color=#000000>Envoi de fichiers</font></legend>
        
            <!-- champs d'envoi de fichier, de type file -->
        
            <p><label for="up"><font color=#000000>Fichier</font></label><input type="file" name="up" /></p>
       
            
       
            <!-- bouton d'envoi -->
        
            <p><input type="submit" name="envoi" value="Envoyer les fichiers" /></p>
        
            </legend>
        
            </fieldset>
        
            </form> 


      et la page php (upload.php) :

      <?php
      
       
      
      if(isset($_FILES['up']))
      
      {
      
      // params
      
      unset($erreur);
      
      $extensions_ok = array('png', 'gif', 'jpg', 'jpeg');
      
      $taille_max = 100000;
      
      $dest_dossier = '/up/';
      
      // utilisez également des slashes sous windows : $dest_dossier = '/up//up/';
      
      // vérifications
      
      if( !in_array( substr(strrchr($_FILES['up']['name'], '.'), 1), $extensions_ok ) )
      
      {
      
      $erreur = 'Veuillez sélectionner un fichier de type png, gif ou jpg !';
      
      }
      
      elseif( file_exists($_FILES['up']['free'])
      
      and filesize($_FILES['up']['free']) > $taille_max)
      
      {
      
      $erreur = 'Votre fichier doit faire moins de 500Ko !';
      
      }
      
      // copie du fichier
      
      if(!isset($erreur))
      
      {
      
      $dest_fichier = basename($_FILES['up']['free']);
      
      // formatage nom fichier
      
      // enlever les accents
      
      $dest_fichier = strtr($dest_fichier,
      
      'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ',
      
      'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
      
      // remplacer les caracteres autres que lettres, chiffres et point par _
      
      $dest_fichier = preg_replace('/([^.a-z0-9]+)/i', '_', $dest_fichier);
      
      // copie du fichier
      
      move_uploaded_file($_FILES['up']['free'], $dest_dossier . $dest_fichier);
      
      }
      
      }
      
       
      
      ?>
      
      Hebergeur en maintenance, désole.
      
      Veuillez reporter votre hebergement.
      
      merci


      toujour en panne je tombe bien sur la page php avec "Hebergeur en maintenance, désole.

      Veuillez reporter votre hebergement.

      merci
      en haut de page

      pour faire un test ===> http://acr02.fr/form.html

      merci
      1. je l'ai fait regarde :

        <?php
        
        if(isset($_FILES['up']))
        
        {
        
        // params
        
        unset($erreur);
        
        $extensions_ok = array('png', 'gif', 'jpg', 'jpeg');
        
        $taille_max = 100000;
        
        $dest_dossier = '/up/';
        
        // utilisez également des slashes sous windows : $dest_dossier = '/up/';
        
        // vérifications
        
        if( !in_array( substr(strrchr($_FILES['up']['name'], '.'), 1), $extensions_ok ) )
        
        {
        
        $erreur = 'Veuillez sélectionner un fichier de type png, gif ou jpg !';
        
        }
        
        elseif( file_exists($_FILES['up']['free'])
        
        and filesize($_FILES['up']['free']) > $taille_max)
        
        {
        
        $erreur = 'Votre fichier doit faire moins de 500Ko !';
        
        }
        
        // copie du fichier
        
        if(!isset($erreur))
        
        {
        
        $dest_fichier = basename($_FILES['up']['free']);
        
        // formatage nom fichier
        
        // enlever les accents
        
        $dest_fichier = strtr($dest_fichier,
        
        'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ',
        
        'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
        
        // remplacer les caracteres autres que lettres, chiffres et point par _
        
        $dest_fichier = preg_replace('/([^.a-z0-9]+)/i', '_', $dest_fichier);
        
        // copie du fichier
        
        move_uploaded_file($_FILES['up']['free'], $dest_dossier . $dest_fichier);
        
        }
        
        }


        mais c'est pareil je voit bien le "coucou" mais c'est tout et rien ne s'upload...
        1. Ce qui ne va pas, c'est que dans ton script, tu utilises $_FILES['up'] alors que ton champ dans tonformulaire s'appelle 'photo'.

          Il faudrait que tu remplaces tous les $_FILES['up'] par $_FILES['photo'].

          Ca devrait suffire.

          Raph
          1. et bien j'ai bien coucou apres l'upload mais rien dans mon dossier "up" et pas de retour lien
            1. A la fin de ton fichier, ajoute (après ?>) :
              Coucou
              


              Si tu ne vois pas "Coucou" dans ta page, c'est que le script a planté avant la fin de la page...

              Raph
              1. non meme pas justement il doit y avoir une erreur sur le script mais je voit pas ou !
                a tu tester sur le lien que j'ai poster plus haut ?
                1. Contributeur
                  ton script ne demande aucun affichage donc il est normal qu'il n'y ait rien d'affiché, mais est-ce que le fichier est uploadé ?

                  après ce sera à toi d'afficher ce que tu veux comme résultat.
                  if( move_uploaded_file($_FILES['up']['free'], $dest_dossier . $dest_fichier) )
                  {
                       echo( 'YES !!!' );
                  }
                  else
                  {
                       echo( 'NO !' );
                  }

                  1. j'ai modifier le formulaire comme ca :

                    <!-- Formulaire -->
                    
                          <!-- Attention, ne de ne pas oublier le enctype="multipart/form-data" -->
                      
                          <form method="POST" action="upload.php" enctype="multipart/form-data">
                    
                          <!-- Limiter la taille des fichiers à 500Ko -->
                    
                          <input type="hidden" name="MAX_FILE_SIZE" value="500000" />
                      
                          <fieldset>
                    
                          <legend><font color=#000000>Envoi de fichiers</font></legend>
                      
                          <!-- champs d'envoi de fichier, de type file -->
                      
                          <p><label for="photo"><font color=#000000>Fichier</font></label><input type="file" name="photo" /></p>
                     
                          
                     
                          <!-- bouton d'envoi -->
                      
                          <p><input type="submit" name="envoi" value="Envoyer les fichiers" /></p>
                      
                          </legend>
                      
                          </fieldset>
                      
                          </form> 


                    la page php (upload.php) :

                    <?php 
                    
                    if(isset($_FILES['photo']))
                    
                    {
                    
                    // params
                    
                    unset($erreur);
                    
                    $extensions_ok = array('png', 'gif', 'jpg', 'jpeg');
                    
                    $taille_max = 100000;
                    
                    $dest_dossier = '/up/';
                    
                    // utilisez également des slashes sous windows : $dest_dossier = '/up/';
                    
                    // vérifications
                    
                    if( !in_array( substr(strrchr($_FILES['free']['name'], '.'), 1), $extensions_ok ) )
                    
                    {
                    
                    $erreur = 'Veuillez sélectionner un fichier de type png, gif ou jpg !';
                    
                    }
                    
                    elseif( file_exists($_FILES['up']['free'])
                    
                    and filesize($_FILES['up']['free']) > $taille_max)
                    
                    {
                    
                    $erreur = 'Votre fichier doit faire moins de 500Ko !';
                    
                    }
                    
                    // copie du fichier
                    
                    if(!isset($erreur))
                    
                    {
                    
                    $dest_fichier = basename($_FILES['up']['free']);
                    
                    // formatage nom fichier
                    
                    // enlever les accents
                    
                    $dest_fichier = strtr($dest_fichier,
                    
                    'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ',
                    
                    'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
                    
                    // remplacer les caracteres autres que lettres, chiffres et point par _
                    
                    $dest_fichier = preg_replace('/([^.a-z0-9]+)/i', '_', $dest_fichier);
                    
                    // copie du fichier
                    
                    move_uploaded_file($_FILES['up']['free'], $dest_dossier . $dest_fichier);
                    
                    }
                    
                    }
                     
                    
                    ?>


                    mon fichier de stockage se nomme "up"

                    mais quand je veut uploader j'arrive sur la page php mais blanche ==>http://acr02.fr/test/
                    1. Contributeur
                      dans la balise <form> tu indiques juste quel page sera appelée par le serveur.
                      l'endroit où tu stockes les images il faut le définir dans ton script PHP avec une variable, par exemple :
                      $dossierimages = 'mondossier';

                      il n'y a pas de rapport entre les deux.

                      si tu sépares formulaire HTML et script PHP, il faut indiquer l'adresse du fichier PHP.
                      1. ce que je pige pas c'est up.php pourquoi si c'est un fichier pour stocker non !
                        et si je met le formulaire a part donc form.html et up.php pour le script php, comment indiquer l'endroit ou les fichiers vont etre uploader et
                        sur ce script est il indiquer que a la fin de l'upload l'url du lien sera afficher..
                        1. Contributeur
                          il faut que tu mettes le nom du fichier qui devra être exécuté au moment où l'utilisateur clique sur "Valider".

                          tu fais tout dans le même fichier (affichage du formulaire et traitement de l'envoi du formulaire) donc il faut que tu indiques le nom du fichier.

                          si c'est 'up.php' ça fera :
                          <form method="POST" action="up.php" enctype="multipart/form-data">

                          1. Contributeur
                            dans le 'action' il faut un nom de script complet.
                            <form method="POST" action="up" enctype="multipart/form-data">

                            1. j'ai supprimer ce script car pas de retour d'url apres upload

                              en voici un autre mais apres upload (qui ne marche pas) il me renvoi sur l'index of

                              <?php
                              
                               
                              
                              if(isset($_FILES['photo']))
                              
                              {
                              
                              // params
                              
                              unset($erreur);
                              
                              $extensions_ok = array('png', 'gif', 'jpg', 'jpeg');
                              
                              $taille_max = 100000;
                              
                              $dest_dossier = 'up/';
                              
                              // utilisez également des slashes sous windows : $dest_dossier = 'up/';
                              
                              // vérifications
                              
                              if( !in_array( substr(strrchr($_FILES['photo']['name'], '.'), 1), $extensions_ok ) )
                              
                              {
                              
                              $erreur = 'Veuillez sélectionner un fichier de type png, gif ou jpg !';
                              
                              }
                              
                              elseif( file_exists($_FILES['photo']['tmp_name'])
                              
                              and filesize($_FILES['photo']['tmp_name']) > $taille_max)
                              
                              {
                              
                              $erreur = 'Votre fichier doit faire moins de 500Ko !';
                              
                              }
                              
                              // copie du fichier
                              
                              if(!isset($erreur))
                              
                              {
                              
                              $dest_fichier = basename($_FILES['up']['free']);
                              
                              // formatage nom fichier
                              
                              // enlever les accents
                              
                              $dest_fichier = strtr($dest_fichier,
                              
                              'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ',
                              
                              'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
                              
                              // remplacer les caracteres autres que lettres, chiffres et point par _
                              
                              $dest_fichier = preg_replace('/([^.a-z0-9]+)/i', '_', $dest_fichier);
                              
                              // copie du fichier
                              
                              move_uploaded_file($_FILES['photo']['tmp_name'], $dest_dossier . $dest_fichier);
                              
                              }
                              
                              }
                              
                               
                              
                              ?>
                              
                              <!-- Formulaire -->
                              
                                    <!-- Attention, ne de ne pas oublier le enctype="multipart/form-data" -->
                                
                                    <form method="POST" action="up" enctype="multipart/form-data">
                              
                                    <!-- Limiter la taille des fichiers à 500Ko -->
                              
                                    <input type="hidden" name="MAX_FILE_SIZE" value="500000" />
                                
                                    <fieldset>
                              
                                    <legend><font color=#000000>Envoi de fichiers</font></legend>
                                
                                    <!-- champs d'envoi de fichier, de type file -->
                                
                                    <p><label for="photo"><font color=#000000>Fichier</font></label><input type="file" name="photo" /></p>
                               
                                    
                               
                                    <!-- bouton d'envoi -->
                                
                                    <p><input type="submit" name="envoi" value="Envoyer les fichiers" /></p>
                                
                                    </legend>
                                
                                    </fieldset>
                                
                                    </form> 
                              1. Contributeur
                                salut,

                                est-ce que répertoire de destination '$DESTINATION_FOLDER' existe bien ?
                                • 1
                                • 2