8768 sujets

Développement web côté serveur, CMS

Bonjour à tous,

Voilà j'ai fais un script pour uploader une photo (enfin récupérer sur le web et tentative d'adaptation ! )

Si j'uploade une photo avec les bons paramètres dés le départ pas de soucis (mois d'un mega et max 800x800px) la photos s'uploade et est déplacé dans le bon dossier.

Par contre dés que la photo sort des clous impossible de voire figurer mon message d'erreur le script plante et m'affiche inlassablement :

Warning: getimagesize(): Filename cannot be empty in /home/users6/z/zgl5959/www/rentabike/rb_depot.php on line 47

Si après le script de traitement de l'image :


// Constantes
define('TARGET', $_SERVER['DOCUMENT_ROOT'].'rentabike/images/');    // Repertoire cible
define('MAX_SIZE', 100000);    // Taille max en octets du fichier
define('WIDTH_MAX', 800);    // Largeur max de l'image en pixels
define('HEIGHT_MAX', 800);    // Hauteur max de l'image en pixels
 
// Tableaux de donnees
$tabExt = array('jpg','gif','png','jpeg');    // Extensions autorisees
$infosImg = array();
 
// Variables
$extension = '';
$message = '';
$nomImage = '';


if($_POST['depot'] == "deposer"){
// Traitement de l'upload image
	  // On verifie si le champ est rempli
  if( !empty($_FILES['photo']['name']) ){
  	var_dump($_FILES);
    // Recuperation de l'extension du photo
    $extension  = pathinfo($_FILES['photo']['name'], PATHINFO_EXTENSION);
    // On verifie l'extension du fichier
    if(in_array(strtolower($extension),$tabExt)){
      // On recupere les dimensions du fichier
      $infosImg = getimagesize($_FILES['photo']['tmp_name']);
      // On verifie le type de l'image
      if($infosImg[2] >= 1 && $infosImg[2] <= 14){
        // On verifie les dimensions et taille de l'image
        if(($infosImg[0] <= WIDTH_MAX) && ($infosImg[1] <= HEIGHT_MAX) && (filesize($_FILES['photo']['tmp_name']) <= MAX_SIZE)){
          // Parcours du tableau d'erreurs
          if(isset($_FILES['photo']['error']) && UPLOAD_ERR_OK === $_FILES['photo']['error']){
            // On renomme le fichier
            $nomImage = uniqid() .'.'. $extension;
            // Si c'est OK, on teste l'upload
            if(move_uploaded_file($_FILES['photo']['tmp_name'], TARGET.$nomImage)){
              $message = 'Upload réussi !';
            }else{
              // Sinon on affiche une erreur systeme
              $message = '<div class="alert alert-danger" role="alert">Problème lors de l\'upload !</div>';
              exit();
            }
          }else{
            $message = '<div class="alert alert-danger" role="alert">Une erreur interne a empêché l\'uplaod de l\'image</div>';
            exit();
          }
        }else{
          // Sinon erreur sur les dimensions et taille de l'image
          $message = '<div class="alert alert-danger" role="alert">Erreur dans les dimensions de l\'image !</div>';
          exit();
        }
      }else{
        // Sinon erreur sur le type de l'image
        $message = '<div class="alert alert-danger" role="alert">Le photo à uploader n\'est pas une image !</div>';
        exit();
      }
    }else{
      // Sinon on affiche une erreur pour l'extension
      $message = '<div class="alert alert-danger" role="alert">L\'extension du fichier est incorrecte !</div>';
      exit();
    }
  }
}


Si je fais un var_dump de $_FILES il ne rempli pas les champs tmp_name, type, error et size ??? (j'image à cause de Getimagesize() )

Ci-après le résultat du var_dump($_FILES) :

array(1) { ["photo"]=> array(5) { ["name"]=> string(19) "WP_20150106_001.jpg" ["type"]=> string(0) "" ["tmp_name"]=> string(0) "" ["error"]=> int(2) ["size"]=> int(0) } }

Si une âme généreuse pouvait jeter un oeil ce serait super cool Smiley lol


Pis accessoirement si quelqu'un pouvait me dire où est précisément le fichier temporaire parce que je n'arrive pas à le retrouver Smiley biggol
Modifié par Soxy95 (11 Jun 2016 - 12:02)
Soxy95 a écrit :
Bonjour à tous,

Voilà j'ai fais un script pour uploader une photo (enfin récupérer sur le web et tentative d'adaptation ! )

Si j'uploade une photo avec les bons paramètres dés le départ pas de soucis (mois d'un mega et max 800x800px) la photos s'uploade et est déplacé dans le bon dossier.

Par contre dés que la photo sort des clous impossible de voire figurer mon message d'erreur le script plante et m'affiche inlassablement :

Warning: getimagesize(): Filename cannot be empty in /home/users6/z/zgl5959/www/rentabike/rb_depot.php on line 47

Si après le script de traitement de l'image :


// Constantes
define('TARGET', $_SERVER['DOCUMENT_ROOT'].'rentabike/images/');    // Repertoire cible
define('MAX_SIZE', 100000);    // Taille max en octets du fichier
define('WIDTH_MAX', 800);    // Largeur max de l'image en pixels
define('HEIGHT_MAX', 800);    // Hauteur max de l'image en pixels
 
// Tableaux de donnees
$tabExt = array('jpg','gif','png','jpeg');    // Extensions autorisees
$infosImg = array();
 
// Variables
$extension = '';
$message = '';
$nomImage = '';


if($_POST['depot'] == "deposer"){
// Traitement de l'upload image
	  // On verifie si le champ est rempli
  if( !empty($_FILES['photo']['name']) ){
  	var_dump($_FILES);
    // Recuperation de l'extension du photo
    $extension  = pathinfo($_FILES['photo']['name'], PATHINFO_EXTENSION);
    // On verifie l'extension du fichier
    if(in_array(strtolower($extension),$tabExt)){
      // On recupere les dimensions du fichier
      $infosImg = getimagesize($_FILES['photo']['tmp_name']);
      // On verifie le type de l'image
      if($infosImg[2] &gt;= 1 &amp;&amp; $infosImg[2] &lt;= 14){
        // On verifie les dimensions et taille de l'image
        if(($infosImg[0] &lt;= WIDTH_MAX) &amp;&amp; ($infosImg[1] &lt;= HEIGHT_MAX) &amp;&amp; (filesize($_FILES['photo']['tmp_name']) &lt;= MAX_SIZE)){
          // Parcours du tableau d'erreurs
          if(isset($_FILES['photo']['error']) &amp;&amp; UPLOAD_ERR_OK === $_FILES['photo']['error']){
            // On renomme le fichier
            $nomImage = uniqid() .'.'. $extension;
            // Si c'est OK, on teste l'upload
            if(move_uploaded_file($_FILES['photo']['tmp_name'], TARGET.$nomImage)){
              $message = 'Upload réussi !';
            }else{
              // Sinon on affiche une erreur systeme
              $message = '&lt;div class="alert alert-danger" role="alert"&gt;Problème lors de l\'upload !&lt;/div&gt;';
              exit();
            }
          }else{
            $message = '&lt;div class="alert alert-danger" role="alert"&gt;Une erreur interne a empêché l\'uplaod de l\'image&lt;/div&gt;';
            exit();
          }
        }else{
          // Sinon erreur sur les dimensions et taille de l'image
          $message = '&lt;div class="alert alert-danger" role="alert"&gt;Erreur dans les dimensions de l\'image !&lt;/div&gt;';
          exit();
        }
      }else{
        // Sinon erreur sur le type de l'image
        $message = '&lt;div class="alert alert-danger" role="alert"&gt;Le photo à uploader n\'est pas une image !&lt;/div&gt;';
        exit();
      }
    }else{
      // Sinon on affiche une erreur pour l'extension
      $message = '&lt;div class="alert alert-danger" role="alert"&gt;L\'extension du fichier est incorrecte !&lt;/div&gt;';
      exit();
    }
  }
}


Si je fais un var_dump de $_FILES il ne rempli pas les champs tmp_name, type, error et size ??? (j'image à cause de Getimagesize() )

Ci-après le résultat du var_dump($_FILES) :

array(1) { ["photo"]=&gt; array(5) { ["name"]=&gt; string(19) "WP_20150106_001.jpg" ["type"]=&gt; string(0) "" ["tmp_name"]=&gt; string(0) "" ["error"]=&gt; int(2) ["size"]=&gt; int(0) } }

Si une âme généreuse pouvait jeter un oeil ce serait super cool Smiley lol


Pis accessoirement si quelqu'un pouvait me dire où est précisément le fichier temporaire parce que je n'arrive pas à le retrouver Smiley biggol

PHP pas mon truc... mais en parcourant le code, je vois que tu utilises par trois fois la séquence :
$_FILES['photo']['tmp_name']

A priori, il serait utile de :
- la stocker dans une variable
- s'assurer qu'elle est non vide
Cela semble être un nom de fichier et ton message d'erreur paraît s'y référer :
Warning: getimagesize(): Filename cannot be empty in /home/users6/z/zgl5959/www/rentabike/rb_depot.php on line 47

M'enfin, juste un avis...
Merci de ta réponse rapide

J'ai fais un
$temp = $_FILES['photo']['tmp_name'];
Mais cela ne change rien, toujours la même insulte php à l'arrivée Smiley smile
Je suis d'accord avec toi on dirait qu'il ne trouve pas le $_FILES['photo']['tmp_name'] mais pourquoi cela ne lui pose aucun pb quand les caractéristiques de la photo sont bonnes.

Si quelqu'un avait une autre idée?
Merci d'avance Smiley smile
Modifié par Soxy95 (11 Jun 2016 - 12:19)
Soxy95 a écrit :
Merci de ta réponse rapide

J'ai fais un
$temp = $_FILES['photo']['tmp_name'];
Mais cela ne change rien, toujours la même insulte php à l'arrivée Smiley smile
Je suis d'accord avec toi on dirait qu'il ne trouve pas le $_FILES['photo']['tmp_name'] mais pourquoi cela ne lui pose aucun pb quand les caractéristiques de la photo sont bonnes.

Si quelqu'un avait une autre idée?
Merci d'avance Smiley smile

Peux-tu faire un affichage console de ta variable $temp afin de voir, au moment où ça plante, la tête qu'elle a ?
Si à ce moment là elle est non renseignée, il faudra alors remonter d'un cran et voir pourquoi elle l'est...
Bon je confirme mes soupçons cela vient bien de mon hébergeur qui n'accepte pas les uploads de plus d'1 Mo. (Ok ok je paye 8€ l'année ça m'apprendra ! )

Merci de ta disponibilité sepecat.
Du coup j'envoie un message d'erreur à l'internaute si PHP n'est pas capable de remplir getimagesize() en signalant que le fichier ne peut dépasser les 1Mo et l'affaire est réglée. (Oui parfois je suis quand même un sacré bourrin je vous l'accorde Smiley smile )
Soxy95 a écrit :
Bon je confirme mes soupçons cela vient bien de mon hébergeur qui n'accepte pas les uploads de plus d'1 Mo. (Ok ok je paye 8€ l'année ça m'apprendra ! )

Merci de ta disponibilité sepecat.
Du coup j'envoie un message d'erreur à l'internaute si PHP n'est pas capable de remplir getimagesize() en signalant que le fichier ne peut dépasser les 1Mo et l'affaire est réglée. (Oui parfois je suis quand même un sacré bourrin je vous l'accorde Smiley smile )

Bof, tu sais, on est tous passés à côté de quelque chose à un moment ou à un autre dans nos développements respectifs...
Tant que cela reste occasionnel, il n'y a pas matière à s'inquiéter outre mesure.
Par contre, lorsqu'on en vient à aligner les c******ies les unes après les autres avec constance, il est probablement temps de prendre sa retraite et de se mettre à la belotte ou aux dominos (commentaire d'ordre général qui n'a rien à voir avec le présent sujet Smiley biggrin ).
Modifié par sepecat (11 Jun 2016 - 13:53)