smilm | 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 :
- FICHIER 1: La classe Avatar.
- <?php
- // Déclaration des paramètres de connexion
- $db_host = SERVEUR;
- $db_user = NOM;
- $db_pass = PASS;
- $db_name = BASE;
- $connexion = mysql_pconnect($db_host, $db_user, $db_pass) or die (mysql_error());
- $db = mysql_select_db($db_name, $connexion) or die(mysql_error());
- $dossier = "avatar_joueurs\\"; //dossier de destination des fichiers images
- $largeur_finale = 100;
- $hauteur_finale = 100;
- $message='';
- class Img {
- //---Propiétés de l'objet
- var $fichier0; // nom de l'image source (tmp)
- var $fichier1; // nom de l'image à composer (=avatar)
- var $ext; // extension de l'image
- var $largeur; // dimensions image originale
- var $hauteur; // " " "
- var $size; // taille pour réduction
- var $quality; // qualité de l'image réduite
- var $error; // variable pour les erreurs
- //--- CONSTRUCTEUR
- function doImg($tmp, $extension, $nouv_avatar) {
- global $dossier;
- $this->fichier0 = $tmp;
- $this->fichier1 = ($dossier . $nouv_avatar);
- $this->ext = $extension;
- }
- function SetParam($large, $haut, $size, $qualite) {
- $this->largeur = (int) $large;
- $this->hauteur = (int) $haut;
- $this->size = (int) $size;
- $this->quality = (int) $qualite;
- }
- //---Lance le redimensionnement
- function doDimension() {
- if($this->Resize()) {
- return true;
- }
- else {
- return false;
- }
- }
- //---Retourne l'erreur s'il y en a une
- function Error(){
- if(!empty($this->error)) {
- return $this->error();
- }
- }
- //---Fonction de redimensionnement
- function Resize() {
- $source = $this->fichier0;
- $destination = $this->fichier1;
- if (!file_exists($source)) {
- $this->error = "Erreur : Le Fichier n'existe pas !";
- }
- if(!function_exists("Imagecreatefromjpeg" )){
- $this->error = "Erreur : La Librairie GD n'est pas instalée !";
- }
- switch($this->ext){
- case '.jpg':
- case '.jpeg':
- $src_img=imagecreatefromjpeg($source);
- break;
- case '.gif':
- $src_img=imagecreatefromgif($source);
- break;
- default:
- $this->error = "Erreur : Extension non autorisée";
- break;
- }
- if(!$src_img) {
- $this->error = "Erreur : Lecture impossible de l'image ".$source." !";
- }
- //---Détermine les proportions
- if($this->largeur < $this->hauteur) { //image plus haute que large (verticale)
- $p = $this->largeur / $this->hauteur;
- $height = $this->size;
- $width = $p * $height;
- }
- else { //image plus large que haute (horizontale)
- $p = $this->hauteur / $this->largeur;
- $width = $this->size;
- $height = $p * $width;
- }
- $dst_img = ImageCreateTrueColor($width, $height);
- if(!$dst_img) { $this->error = "Erreur : Buffer non créé : ".$dst_img; }
- //---Rééchantillonne l'image sur 100x100
- imagecopyresampled($dst_img,$src_img,0,0,0,0,$width,$height,$this->largeur,$this->hauteur);
- //---Enregistre l'image rendue sous le nom destination = avatar
- echo "dst img : $dst_img , destin: $destination, qual= $this->quality";
- if(imagejpeg($dst_img,$destination,$this->quality)) {
- return true;
- }
- else {
- return false;
- }
- }
- } //fin classe Img
- class avatar {
- var $pseudo; //pseudo du joueur
- var $fichier; //fichier image téléchargé - enregistré dans un tmp
- var $avatar; //fichier 'avatar' enregistré (pseudo + extension)
- var $extension; //extension du fichier original (gif, jpg, ...)
- function maj_avatar()
- {
- global $dossier;
- //Traitement des erreurs
- if ($_FILES['avatar']['error']) {
- switch ($_FILES['nom_du_fichier']['error']) {
- /* case 1: // UPLOAD_ERR_INI_SIZE
- $message = "Votre avatar dépasse la limite autorisée par le serveur !<br>\n"; //(php.ini)
- $message .= "Vous pouvez ajouter un avatar plus léger en modifiant votre profil";
- break;
- case 2: // UPLOAD_ERR_FORM_SIZE
- $message = "Votre avatar dépasse la limite autorisée dans le formulaire HTML !<br>\n";
- $message .= "Vous pouvez ajouter un avatar plus léger en modifiant votre profil";
- break;
- */ case 3: // UPLOAD_ERR_PARTIAL
- $message = "L'envoi de votre avatar a été interrompu pendant le transfert !<br>\n";
- $message .= "Vous pouvez ajouter un avatar en modifiant votre profil";
- break;
- case 4: // UPLOAD_ERR_NO_FILE
- $message = "L'avatar que vous nous avez envoyé a une taille nulle !<br>\n";
- $message .= "Vous pouvez ajouter un avatar en modifiant votre profil";
- break;
- }
- }
- else {
- // $_FILES['avatar']['error'] vaut 0 soit UPLOAD_ERR_OK : aucune erreur
- //---Vérifie d'abord si un avatar est déjà existant, auquel cas, il faut d'abord le supprimer (unlink)
- $existe = "SELECT pseudo, avatar FROM membres WHERE pseudo = '$this->pseudo'";
- $resultat = mysql_query($existe);
- $retour = mysql_fetch_assoc($resultat);
- if (mysql_num_rows($resultat) > 0)
- {
- $fichier = $dossier . $resultat["avatar"];
- if (file_exists($fichier)) {
- unlink($fichier);
- }
- };
- mysql_free_result($resultat);
- //---définition du nom de fichier : pseudo.extension
- $this->extension = strtolower(strrchr($_FILES['avatar']['name'],"." ));
- $this->avatar = $this->pseudo . $this->extension;
- //---Récupère les infos de l'image (largeur / hauteur)
- $imageinfo= getimagesize($_FILES['avatar']['tmp_name']);
- $imagewidth =$imageinfo[0];
- $imageheight=$imageinfo[1];
- //---Traitement de l'image
- $image = new Img; // instanciation de l'objet
- $image->doImg($_FILES['avatar']['tmp_name'], $this->extension, $this->avatar);
- $image->SetParam($imagewidth, $imageheight, 100, 100);
- $image->doDimension();
- //Mise à jour de la db
- $sql = "UPDATE `membres` SET avatar = '$this->avatar' WHERE pseudo = '$this->pseudo'";
- if (mysql_query($sql))
- { $message .= ""; }
- else
- { $message = "Erreur à l'enregistrement. Votre avatar n'a pas été modifié.<br>\n"; }
- }
- return $message;
- }
- } //fin de la classe 'avatar'
- ?>
|
Code :
- FICHIER 2 : APPEL
- <?php
- if ($_FILES['avatar']['type']=="image/jpeg" //possibilité de rajouter d'autres types
- OR $_FILES['avatar']['type']=="image/gif" )
- {
- require_once('avatar.class.php');
- $new = new avatar();
- $new->pseudo = $pseudo;
- $retour = $new->maj_avatar();
- }
- ?>
|
Des idées ? |