upload & librairie GD (image miroir) [resolu]

upload & librairie GD (image miroir) [resolu] - PHP - Programmation

Marsh Posté le 16-03-2006 à 11:40:50    

en préambule, une explication de l'usage de script, c'est un formulaire d'upload pour une image (n'importe quel format, je fait mes test avec un jpg) et qui apres traitement copie deux image (dont une symétrique verticalement) dans deux repertoire distinct au format png...
merci à omega2 qui m'a (encore) aidé!

Code :
  1. <?php
  2. if (isset($_FILES['fichier'])) {
  3.     //debug
  4.     print_r($_FILES['fichier']);
  5.     // Variables récupérée par methode POST du formulaire
  6.     $nom = substr($_FILES['fichier']['name'],0,-4);
  7.     $type = $_FILES['fichier']['type'];
  8.     $taille = $_FILES['fichier']['size'];
  9.     $nom_tmp = $_FILES['fichier']['tmp_name'];
  10.     $sens =  $_POST['sens'];
  11.     //test de la taille du fichier
  12.     $MAX_SIZE  = 8388608;
  13.     if($taille > $MAX_SIZE){
  14.         $erreur = "Le fichier est trop volumineux.";
  15.     } else {
  16.         //test de l'existence d'un fichier portant le même nom
  17.         if(file_exists("gauche/".$nom."png" )){
  18.             $erreur = "Un fichier du même nom existe deja sur le serveur.";
  19.         }
  20.     }
  21.     if (!isset($erreur)) {
  22.         // verification du mimetype
  23.         $FILE_MIMES = array(
  24.             'image/pjpeg'=>"jpg",
  25.             'image/jpeg'=>"jpg",
  26.             'image/jpg'=>"jpg",
  27.             'image/png'=>"png",
  28.             'image/x-png'=>"png",
  29.             'image/gif'=>"gif",
  30.             'image/bmp'=>"bmp"
  31.         );
  32.         $type = $FILE_MIMES[$_FILES['fichier']['type']];
  33.         switch($type) {
  34.             case 'jpg': $image = ImageCreateFromJPEG($nom_tmp); break;
  35.             case 'png': $image = ImageCreateFromPNG($nom_tmp); break;
  36.             case 'gif': $image = ImageCreateFromGIF($nom_tmp); break;
  37.             case 'bmp': $image = ImageCreateFromWBMP($nom_tmp); break;
  38.             default: $erreur = "Type de fichier non reconnu."; break;
  39.         }
  40.         //ouverture de l'image
  41.         if(!isset($image)){
  42.             $erreur = "Impossible d'ouvrir l'image.";
  43.         } else {
  44.             $w = imagesx($image);
  45.             $h = imagesy($image);
  46.             $image_mirroir = imagecreatetruecolor($w,$h);
  47.             $vertical = false;
  48.             for($y=0;$y<$h;$y++) {
  49.                 for($x=0;$x<$w;$x++) {
  50.                     imagesetpixel($image_mirroir,$vertical?$x:$w-$x,$vertical?$h-$y:$y,imagecolorat($image,$x,$y));
  51.                 }
  52.             }
  53.             $erreur="";
  54.             if ($sens=="gauche" ) {
  55.                 if(imagepng($image,'gauche/'.$nom.'.png')) {
  56.                     $erreur .= '<br>Nous avons bien copié le fichier '.$_FILES['fichier']['name'].' dans gauche/'.$nom.'.png';
  57.                 }
  58.                 if(imagepng($image_mirroir,'droite/'.$nom.'.png')) {
  59.                     $erreur .= '<br>Nous avons bien copié le fichier '.$_FILES['fichier']['name'].' dans droite/'.$nom.'.png';
  60.                 }
  61.             } else {
  62.                 if(imagepng($image,'droite/'.$nom.'.png')) {
  63.                     $erreur .= '<br>Nous avons bien copié le fichier '.$_FILES['fichier']['name'].' dans droite/'.$nom.'.png';
  64.                 }
  65.                 if(imagepng($image_mirroir,'gauche/'.$nom.'.png')) {
  66.                     $erreur .= '<br>Nous avons bien copié le fichier '.$_FILES['fichier']['name'].' dans gauche/'.$nom.'.png';
  67.                 }
  68.             }
  69.         }
  70.     }
  71. echo $erreur;
  72. }
  73. ?>
  74. <form action="upload.php" method="post" ENCTYPE="multipart/form-data" >
  75. <input type="file" name="fichier">
  76. <select name="sens">
  77. <option>gauche</option>
  78. <option>droite</option>
  79. </select>
  80. <input type="submit" value="uploader">
  81. </form>


Message édité par mechkurt le 16-03-2006 à 16:39:08

---------------
D3
Reply

Marsh Posté le 16-03-2006 à 11:40:50   

Reply

Marsh Posté le 16-03-2006 à 14:12:04    

l. 54 : if (sens=="gauche" )
$sens peut-être [:dawa]


---------------
HAHAHA I M USING TEH INTERNET
Reply

Marsh Posté le 16-03-2006 à 15:30:50    

putain quand on a le nez dans le guidon, j'essaye ca de suite...
merci  :jap:


---------------
D3
Reply

Marsh Posté le 16-03-2006 à 15:37:06    

non c'est pas ca (mais maintenant il me met les erreurs correspondant au bonne ligne ;) )
donc l'output raw de $image
puis Warning: copy(1): failed to open stream: No such file or directory in /var/www/free.fr/3/7/mbillonlanfrey/test_upload/upload.php on line 55
ensuite l'output raw de $image_mirroir
puis Warning: copy(1): failed to open stream: No such file or directory in /var/www/free.fr/3/7/mbillonlanfrey/test_upload/upload.php on line 58
 
je suis noob en librairie GD, qq'un peut m'aider [:ruisseau de larmes]


---------------
D3
Reply

Marsh Posté le 16-03-2006 à 16:03:55    

Il a l'air de te dire que les fichiers ou les dossiers que t'essaye d'utiliser n'existent pas.
Donc débugage de base :  

  • vérifier ce qu'on lui demande comme fichier (un echo du texte fournis à la fonction)
  • vérifier que le fichier existe bien à l'endroit correspondant.

Reply

Marsh Posté le 16-03-2006 à 16:14:37    

ben c'est un fichier uploadé (regarde le code), l'upload fonctionne (je fait un print_r($_FILES[]); qui fonctionne), je pense que toutes les autres étapes fonctionne puisque j'ai en RAW les deux fichiers (je poste pas le code source qui est enorme mais j'ai deux fichiers qui commence par ‰PNG)
c'est la copie dans qui merde, sans doute qu'on fait pas comme ca, mais la, je suis dans la doc de copy et imagepng, pourtant je ne vois pas mon erreur...
 
bon ma gestion d'erreur n'est pas top mais si sa foirait ailleur ca se verait je pense...


---------------
D3
Reply

Marsh Posté le 16-03-2006 à 16:27:18    

ok, je pige mieux ce que t'as fait.
Alors voilà ce qu'il se passe dans ton code :
Tu créé une image grace à gd.
Au moment de la sauver, tu utilises "imagepng()" ce qui est une bonne idée mais tu ne donne pas de nom de fichier donc "imagepng()" renvoie l'image au navigateur et en plus c'est le résultat d'"imagepng()" (donc un booléen) que tu utilises pour faire une copie de fichier à l'aide de "copy()". "copy()" recoit donc un booléen comme nom de fichier, un booléen en nombre, c'est 0 ou 1 ce qui donne ensuite "0" ou "1" comme chaine. "copy()" cherchera donc un fichier nomé "0" ou un fichier nomé "1" dans le répertoire courant. Il y a peu de chance qu'il le trouve.
 
 
Solution : ne pas utiliser "copy()" et donner un nom de fichier de destination à "imagepng()" comme indiqué dans la doc : http://fr2.php.net/manual/fr/function.imagepng.php


Message édité par omega2 le 16-03-2006 à 16:27:57
Reply

Marsh Posté le 16-03-2006 à 16:36:23    

merci beaucoups, encore une fois omega2 me sauve la mise!
 
et moi faut que j'apprenne a mieux lire la doc (j'ai encore du mal avec les parametres optionnel type [, string] )
d'habitude je m'aide avec les exemples mais la aucun ne sortait dans un fichier, j'aurais dut aller voir les exemples de imagejpg ou imagegif, ca m'aurait surement aidé...
 
encore  :jap:


---------------
D3
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed