Bonjour,
Sur mon site, quand un utilisateur publie une annonce, il a la possibilité de l'illustrer avec une image, j'ai donc réalisé un script qui doit uploader les images sauf qu'il marchait, j'ai du modifier quelque chose mais je ne suis pas sur, et finalement quand je publie une annonce, la page me renvoie erreur dans le transfert du fichier même quand je ne publie pas d'image et quand j'en publie, c'est la même chose. Je ne comprend pas car le code marchait correctement il y a 3 jours. Si quelqu'un voit où est mon erreur, ce serait sympa d'en discuter. voici mon code qui uploade les images:

  if (!empty($_FILES['image']))
    {
    define('FOLDER_TARGET', 'medias/'); // Repertoire cible pour les images
  define('MAX_SIZE', 100000); // Taille max en octets de l'image envoyée
  define('WIDTH_MAX', 10000); // Largeur max de l'image en pixels
  define('HEIGHT_MAX', 10000); // Hauteur max de l'image en pixels
  $maxsize=100000;
  $maxwidth=10000;
  $maxheight=10000;

    if($_FILES['image']['error'] > 0)
      {
        $_SESSION['flash']['danger']="Erreur dans le transfert du fichier";
      }
      else
      {
        if($_FILES['image']['size'] > $maxsize)
          {
            $_SESSION['flash']['danger']="Le fichier est trop gros";
          }
          else
          {
            $extensions_valides = array( 'jpg' , 'jpeg' , 'gif' , 'png', 'PNG', 'JPG', 'GIF', 'JPEG' );

          //1. strrchr renvoie l'extension avec le point (« . »).
          //2. substr(chaine,1) ignore le premier caractère de chaine.
          //3. strtolower met l'extension en minuscules.
            $extension_upload = strtolower(  substr(  strrchr($_FILES['image']['name'], '.')  ,1)  );
            if(in_array($extension_upload,$extensions_valides))
              {
                $image_sizes = getimagesize($_FILES['image']['tmp_name']);
                if($image_sizes[0] > $maxwidth OR $image_sizes[1] > $maxheight)
                {
                 $_SESSION['flash']['danger']="L'image est trop grande";
                }
                else
                {
                  $token=str_random(10);
                  $nomImage = 'annonce-'.$id_user.'-'.$token.'-img.'.$extension_upload;
                  $resultat=move_uploaded_file($_FILES['image']['tmp_name'], FOLDER_TARGET.$nomImage);
                  if($resultat) {
                  $req=$pdo->prepare('UPDATE `annonces` SET `extension_img`=?,`token`=? WHERE `id`=?');
                  $req->execute(array($extension_upload,$token,$id_annonce));
                  $_SESSION['flash']['success']="L'image a bien été uploadé";

                  }
                }
              }
              else
              {
                $_SESSION['flash']['danger']="extension interdite";
              }
            }
      }
    }
exit();

Merci d'avance :)

7 réponses


Salut,

Il nous faudrait l'erreur PHP qui est catchée sinon on ne vas pas pouvoir t'aider :/

il n'y a pas d'erreur php renvoyée, il y a juste écrit erreur dans le transfert du fichier et des fois la page ne se charge pas. et en local cela fonctionne
correctement. là je viens de le refaire et cela fonctionne seulement avec une image en particulier et après avoir publié l'annonce je tombe sur une page blanche où rien ne se trouve

Tu fais ton appel via Ajax ?

non je fais tout en php

Alors pourquoi ce exit() à la fin de ton script ? Tu ne retourne rien ?

oui, je l'ai enlevé maintenant quand je publie une annonce je ne tombe plus sur un page blanche mais l'image ne s'uploade pas sauf une image particulière Capture.png les autres que j'essaie d'uploader ne fonctionnent pas pourtant elles font bien le poids et la taille requise, la page me renvoie erreur dans le transfert du fichier

J'aurais deux questions pour toi.

define('FOLDER_TARGET', 'medias/');

Es-tu sûr que ce n'est pas '/medias/' ?
Et tu ne vérifies pas si la variable $_POST est vide ?