Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1671 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Problème avec imagejpeg

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Problème avec imagejpeg

n°1810958
smilm
Posté le 11-11-2008 à 21:52:43  profilanswer
 

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 ?

mood
Publicité
Posté le 11-11-2008 à 21:52:43  profilanswer
 

n°1811041
ionik
Posté le 12-11-2008 à 10:43:33  profilanswer
 

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


---------------
Recette cookeo Recette de cuisine
n°1811042
ionik
Posté le 12-11-2008 à 10:47:10  profilanswer
 

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
n°1811072
smilm
Posté le 12-11-2008 à 11:28:54  profilanswer
 

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

n°1811080
smilm
Posté le 12-11-2008 à 11:37:49  profilanswer
 

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 ?

n°1811105
CAJAX
Posté le 12-11-2008 à 12:23:40  profilanswer
 

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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Problème avec imagejpeg

 

Sujets relatifs
Probleme affichage simpleviewer avec firefoxProblème de compilation avec kwrite
Problème tableau htmlProblème GTK - point d'entrée de précédure introuvable
problème avec un modulo et un tableau html[réglé]Problème affichage Xhtml avec IE6 et 7
Problème bête, feuille de style htmlproblème EJB en remote
Problème d'encodage lors d'un join.Problème Formulaires
Plus de sujets relatifs à : Problème avec imagejpeg


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR