Problème avec imagejpeg

Problème avec imagejpeg - PHP - Programmation

Marsh Posté le 11-11-2008 à 21:52:43    

Bonjour,
 
Je suis en train de mettre en place un module permettant aux joueurs d'uploader leur avatar sur le site.
Cela marche en local mais pas online.
Voici mon erreur:
Warning: imagejpeg() [function.imagejpeg]: Unable to open 'avatar_joueurs\smilm.jpg' for writing in /home/www/f3fad088e1a76cc6a036ac5d1e8ffb1c/web/avatar.class.php on line 105
 
Voici le code:
 

Code :
  1. FICHIER 1: La classe Avatar.
  2. <?php
  3. // Déclaration des paramètres de connexion
  4. $db_host = SERVEUR;
  5. $db_user = NOM;
  6. $db_pass = PASS;
  7. $db_name = BASE;
  8. $connexion = mysql_pconnect($db_host, $db_user, $db_pass) or die (mysql_error());
  9. $db = mysql_select_db($db_name, $connexion) or die(mysql_error());
  10. $dossier = "avatar_joueurs\\"; //dossier de destination des fichiers images
  11. $largeur_finale = 100;
  12. $hauteur_finale = 100;
  13. $message='';
  14. class Img {
  15. //---Propiétés de l'objet
  16. var $fichier0; // nom de l'image source (tmp)
  17. var $fichier1; // nom de l'image à composer (=avatar)
  18. var $ext;  // extension de l'image
  19. var $largeur; // dimensions image originale
  20. var $hauteur; //      "      "      "
  21. var $size;  // taille pour réduction
  22. var $quality; // qualité de l'image réduite
  23. var $error;  // variable pour les erreurs
  24. //--- CONSTRUCTEUR
  25. function doImg($tmp, $extension, $nouv_avatar) {
  26.  global $dossier;
  27.  $this->fichier0 = $tmp;
  28.  $this->fichier1 = ($dossier . $nouv_avatar);
  29.  $this->ext = $extension;
  30. }
  31. function SetParam($large, $haut, $size, $qualite) {
  32.  $this->largeur = (int) $large;
  33.  $this->hauteur = (int) $haut;
  34.  $this->size = (int) $size;
  35.  $this->quality = (int) $qualite;
  36. }
  37. //---Lance le redimensionnement
  38. function doDimension() {
  39.  if($this->Resize()) {
  40.   return true;
  41.  }
  42.  else {
  43.   return false;
  44.  }
  45. }
  46. //---Retourne l'erreur s'il y en a une
  47. function Error(){
  48.  if(!empty($this->error)) {
  49.   return $this->error();
  50.  }
  51. }
  52. //---Fonction de redimensionnement
  53. function Resize() {
  54.  $source = $this->fichier0;
  55.  $destination = $this->fichier1;
  56.  if (!file_exists($source)) {
  57.   $this->error = "Erreur : Le Fichier n'existe pas !";
  58.  }
  59.  if(!function_exists("Imagecreatefromjpeg" )){
  60.   $this->error = "Erreur : La Librairie GD n'est pas instal&eacute;e !";
  61.  }
  62.  switch($this->ext){
  63.   case '.jpg':
  64.   case '.jpeg':
  65.   $src_img=imagecreatefromjpeg($source);
  66.   break;
  67.   case '.gif':
  68.   $src_img=imagecreatefromgif($source);
  69.   break;
  70.   default:
  71.   $this->error = "Erreur : Extension non autoris&eacute;e";
  72.   break;
  73.  }
  74.  if(!$src_img) {
  75.   $this->error = "Erreur : Lecture impossible de l'image ".$source." !";
  76.  }
  77.  //---Détermine les proportions
  78.  if($this->largeur < $this->hauteur) {   //image plus haute que large (verticale)
  79.   $p = $this->largeur / $this->hauteur;
  80.   $height = $this->size;
  81.   $width = $p * $height;
  82.  }
  83.  else {           //image plus large que haute (horizontale)
  84.   $p = $this->hauteur / $this->largeur;
  85.   $width = $this->size;
  86.   $height = $p * $width;
  87.  }
  88.  $dst_img = ImageCreateTrueColor($width, $height);
  89.  if(!$dst_img) { $this->error = "Erreur : Buffer non cr&eacute;&eacute; : ".$dst_img; }
  90.  //---Rééchantillonne l'image sur 100x100
  91.  imagecopyresampled($dst_img,$src_img,0,0,0,0,$width,$height,$this->largeur,$this->hauteur);
  92.  //---Enregistre l'image rendue sous le nom destination = avatar
  93.  echo "dst img : $dst_img , destin: $destination, qual= $this->quality";
  94.  if(imagejpeg($dst_img,$destination,$this->quality)) {
  95.   return true;
  96.  }
  97.  else {
  98.   return false;
  99.  }
  100. }
  101. } //fin classe Img
  102. class avatar {
  103. var $pseudo; //pseudo du joueur
  104. var $fichier;  //fichier image téléchargé - enregistré dans un tmp
  105. var $avatar; //fichier 'avatar' enregistré (pseudo + extension)
  106. var $extension; //extension du fichier original (gif, jpg, ...)
  107. function maj_avatar()
  108. {
  109.  global $dossier;
  110.  //Traitement des erreurs
  111.  if ($_FILES['avatar']['error']) {
  112.   switch ($_FILES['nom_du_fichier']['error']) {
  113.   /* case 1: // UPLOAD_ERR_INI_SIZE
  114.     $message  = "Votre avatar dépasse la limite autorisée par le serveur !<br>\n"; //(php.ini)
  115.     $message .= "Vous pouvez ajouter un avatar plus léger en modifiant votre profil";
  116.     break;
  117.    case 2: // UPLOAD_ERR_FORM_SIZE
  118.     $message  = "Votre avatar dépasse la limite autorisée dans le formulaire HTML !<br>\n";
  119.     $message .= "Vous pouvez ajouter un avatar plus léger en modifiant votre profil";
  120.     break;
  121.   */ case 3: // UPLOAD_ERR_PARTIAL
  122.     $message  = "L'envoi de votre avatar a été interrompu pendant le transfert !<br>\n";
  123.     $message .= "Vous pouvez ajouter un avatar en modifiant votre profil";
  124.     break;
  125.    case 4: // UPLOAD_ERR_NO_FILE
  126.     $message  = "L'avatar que vous nous avez envoyé a une taille nulle !<br>\n";
  127.     $message .= "Vous pouvez ajouter un avatar en modifiant votre profil";
  128.     break;
  129.   }
  130.  }
  131.  else {
  132.   // $_FILES['avatar']['error'] vaut 0 soit UPLOAD_ERR_OK : aucune erreur
  133.   //---Vérifie d'abord si un avatar est déjà existant, auquel cas, il faut d'abord le supprimer (unlink)
  134.   $existe = "SELECT pseudo, avatar FROM membres WHERE pseudo = '$this->pseudo'";
  135.   $resultat = mysql_query($existe);
  136.   $retour = mysql_fetch_assoc($resultat);
  137.   if (mysql_num_rows($resultat) > 0)
  138.   {
  139.    $fichier = $dossier . $resultat["avatar"];
  140.    if (file_exists($fichier)) {
  141.     unlink($fichier);
  142.    }
  143.   };
  144.   mysql_free_result($resultat);
  145.   //---définition du nom de fichier : pseudo.extension
  146.   $this->extension = strtolower(strrchr($_FILES['avatar']['name'],"." ));
  147.   $this->avatar = $this->pseudo . $this->extension;
  148.   //---Récupère les infos de l'image (largeur / hauteur)
  149.   $imageinfo= getimagesize($_FILES['avatar']['tmp_name']);
  150.   $imagewidth =$imageinfo[0];
  151.   $imageheight=$imageinfo[1];
  152.   //---Traitement de l'image
  153.   $image = new Img;     // instanciation de l'objet
  154.   $image->doImg($_FILES['avatar']['tmp_name'], $this->extension, $this->avatar);
  155.   $image->SetParam($imagewidth, $imageheight, 100, 100);
  156.   $image->doDimension();
  157.   //Mise à jour de la db
  158.   $sql = "UPDATE `membres` SET avatar = '$this->avatar' WHERE pseudo = '$this->pseudo'";
  159.   if (mysql_query($sql))
  160.   { $message .= ""; }
  161.   else
  162.   { $message = "Erreur à l'enregistrement. Votre avatar n'a pas été modifié.<br>\n"; }
  163.  }
  164.  return $message;
  165. }
  166. } //fin de la classe 'avatar'
  167. ?>


 

Code :
  1. FICHIER 2 : APPEL
  2. <?php
  3.  if ($_FILES['avatar']['type']=="image/jpeg"  //possibilité de rajouter d'autres types  
  4.   OR $_FILES['avatar']['type']=="image/gif" )
  5.  {
  6.   require_once('avatar.class.php');
  7.   $new = new avatar();
  8.   $new->pseudo = $pseudo;
  9.   $retour = $new->maj_avatar();
  10.  }
  11. ?>


 
 
Des idées ?

Reply

Marsh Posté le 11-11-2008 à 21:52:43   

Reply

Marsh Posté le 12-11-2008 à 10:43:33    

fait un echo des valeur de repertoire de destination et de provenance


---------------
Recette cookeo Recette de cuisine
Reply

Marsh Posté le 12-11-2008 à 10:47:10    

esaye en récupérant le repertoire courant avec  
getcwd()
 
car j'ai du mal a cerné ton code etant donnée que tu ne précise ni le repertoire temporaire ni celui de destination donc une url non absolue pour une copie d'image en php il aime pas du tout


---------------
Recette cookeo Recette de cuisine
Reply

Marsh Posté le 12-11-2008 à 11:28:54    

Le répertoire de destination est avatar_joueurs.
Le répertoire courant que renvoi getcwd est /home/www/f3fad088e1a76cc6a036ac5d1e8ffb1c/web sachant que sur mon ftp ça se présente comme ça:
 
Racine==>Dossier Web (avec mes fichiers) ==>Des dossiers dont avatar_joueurs
        ==>D'autres dossiers

Reply

Marsh Posté le 12-11-2008 à 11:37:49    

J'ai lu que cela pourrait être un problème de chmod sur le fichier émis par l'utilisateur.
Il faudrait en effet le passer en chmod 666. Comment faire ?

Reply

Marsh Posté le 12-11-2008 à 12:23:40    

Échangez la route sur absolu, probablement le fichier s'inscrit non là-bas, où vous attendez.

Reply

Sujets relatifs:

Leave a Replay

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