IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[Upload] comment copier une image sur le serveur ?


Sujet :

Langage PHP

  1. #1
    Membre du Club Avatar de bylka
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    184
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2007
    Messages : 184
    Points : 60
    Points
    60
    Par défaut [Upload] comment copier une image sur le serveur ?
    Bonjour tout le monde

    je fais un petit formulaire php , avec un champ <input type='file'... , et j'ai un bouton "enregistrer l'image"

    Comment enregistrer l'image sur mon serveur (répertoire spécifique genre ../../images/image.jpg)

    Merci par avance pour vos réponses

  2. #2
    Membre expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Points : 3 972
    Points
    3 972
    Par défaut
    Bonjour,

    tu peux te renseigner sur la fonction http://fr.php.net/move_uploaded_file.

  3. #3
    Membre confirmé
    Développeur Web
    Inscrit en
    Avril 2005
    Messages
    397
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2005
    Messages : 397
    Points : 518
    Points
    518
    Zend PHP5 Certification
    MySQL 4 Core Certification

  4. #4
    Membre averti Avatar de beejeridou
    Homme Profil pro
    Webmaster
    Inscrit en
    Février 2007
    Messages
    280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Février 2007
    Messages : 280
    Points : 342
    Points
    342
    Par défaut
    salut, j'ai créé une classe d'upload d'images que j'utilise souvent, je te la donne avec un exemple, teste la dans un projet à part, tel que je te la donne et dis moi si tu as un soucis...

    la classe que tu copie/colle dans un fichier appelé classe_upload_img.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
     
    <?php
    class Upload_Img {
     
    	function upload_image($post_img_rub, $path, $carre="0", $largeur_img, $cote_img_carre="50") {
    		if($_FILES[$post_img_rub]['name'] != "" || !empty($_FILES[$post_img_rub])) {
     
    			$file_tmp = $_FILES[$post_img_rub]['tmp_name']; 
    			$file_type = $_FILES[$post_img_rub]['type']; 
     
    			if(strstr($file_type, 'jpg') || strstr($file_type, 'jpeg') || strstr($file_type, 'JPG') || strstr($file_type, 'JPEG') 
    			|| strstr($file_type, 'gif') || strstr($file_type, 'GIF')) {
    				$img_name_uniq = uniqid("", true);
    				if($carre == "3") { //pas de resize
    					$tab_size = getimagesize($file_tmp);
    					$img_name_no_resize = $this->img_resize($tab_size[0], $file_tmp, $path, "wallpaper_".$img_name_uniq);//upload big
    				}
     
    				$img_name = $this->img_resize($largeur_img, $file_tmp, $path, $img_name_uniq); 
     
    				if($carre == "1") {
    					$img_name = $this->resize_carre($cote_img_carre, $path, $img_name);
    				}
    				else if($carre == "2") {
    					$img_name = $this->resize_rectangle($largeur_img, $cote_img_carre, $path, $img_name);
    				}
     
    				$this->img_name = $img_name;
    				$this->upload_img_ok = $this->img_name;
    			}
    			else {
    				return false;
    			}
    		}
    		else {
    			return false;
    		}
    	}
    	protected function img_resize($coeff, $file_tmp, $path, $nomrand) {
    		if(strlen($nomrand) > 0) {
    			$size = getimagesize($file_tmp);
    			$new_width = $coeff;
    			switch ($size[2]) {
    				case 1:
    					$src_img = imagecreatefromgif($file_tmp);
    					$new_height = round(( ($coeff)/( imagesx($src_img)) ) * (imagesy($src_img)) );
    					$nomrand = $nomrand.".gif";
    				break;
    				case 2:
    					$src_img = imagecreatefromjpeg($file_tmp);
    					$new_height = round( ( ($coeff)/( imagesx($src_img)) ) * (imagesy($src_img)) );
    					$nomrand = $nomrand.".jpg";
    				break;
    				default:
    					$src_img = imagecreatefromjpeg($file_tmp);
    					$new_height = round( ( ($coeff)/( imagesx($src_img)) ) * (imagesy($src_img)) );
    					$nomrand = $nomrand.".jpg";
    				break;
    			}
    			$dest_path = $path . $nomrand;
    			$dest_img = imagecreatetruecolor($new_width, $new_height);
    			imagecopyresampled($dest_img, $src_img, 0, 0, 0, 0, $new_width, $new_height, $size[0], $size[1]);
    			imagejpeg($dest_img, $dest_path, 100);
    			imagedestroy($src_img);
    		}
    		return $nomrand;
    	}
     
    	protected function resize_carre($cote_img_carre, $path, $img_name) {
    		$tab_size = getimagesize($path.$img_name);
     
    		if($tab_size[0] > $tab_size[1]) {
    			$width = $tab_size[1];
    			$height = $tab_size[1];
    		}
    		else {
    			$width = $tab_size[0];
    			$height = $tab_size[0];
    		}
     
    		$type = $tab_size[2];
    		switch($type) {
    			case 1:
    			$type = ".gif";
    			$source = @imagecreatefromgif($path.$img_name);
    			$var = 1;
    			break;
     
    			case 2:
    			$type = ".jpg";
    			$source = @imagecreatefromjpeg($path.$img_name);
    			$var = 2;
    			break;
     
    			default:
    			$type = ".jpg";
    			$source = @imagecreatefromjpeg($path.$img_name);
    			$var = 2;
    			break;		
    		}
    		$source_width = imagesx($source);
    		$source_height = imagesy($source);
     
    		$fn = sprintf($path.$img_name, 0, 0);
    		$im = @imagecreatetruecolor($width, $height);
    		imagecopyresized($im, $source, 0, 0, 0 * $width, 0 * $height, $width, $height, $width, $height);
    		if($var = 2) {
    			imagejpeg($im, $fn);
    		}
    		else {
    			imagegif($im, $fn);
    		}
    		imagedestroy($im);
    		//
    		$img_name = $this->img_resize($cote_img_carre, $path.$img_name, $path, substr($img_name, 0, -4));
     
    		return $img_name;
    	}
    	protected function resize_rectangle($width, $height, $path, $img_name) {
    		$tab_size = getimagesize($path.$img_name);
     
    		$type = $tab_size[2];
    		switch($type) {
    			case 1:
    			$type = ".gif";
    			$source = @imagecreatefromgif($path.$img_name);
    			$var = 1;
    			break;
     
    			case 2:
    			$type = ".jpg";
    			$source = @imagecreatefromjpeg($path.$img_name);
    			$var = 2;
    			break;
     
    			default:
    			$type = ".jpg";
     
     
    			$source = @imagecreatefromjpeg($path.$img_name);
    			$var = 2;
    			break;		
    		}
    		$source_width = imagesx($source);
    		$source_height = imagesy($source);
     
    		$fn = sprintf($path.$img_name, 0, 0);
    		$im = @imagecreatetruecolor($width, $height);
    		imagecopyresized($im, $source, 0, 0, 0 * $width, 0 * $height, $width, $height, $width, $height);
    		if($var = 2) {
    			imagejpeg($im, $fn);
    		}
    		else {
    			imagegif($im, $fn);
    		}
    		imagedestroy($im);
    		//
    		$img_name = $this->img_resize($width, $path.$img_name, $path, substr($img_name, 0, -4));
     
    		return $img_name;
    	}
    	function delete_file($file) {
    		$file_info = "";
    	    if(@file_exists($file)) {
    	        $file_info = pathinfo($file);
    	        if(@unlink($file)) {
    	            $txt = "Fichier : ".$file_info['basename']." effac&eacute; .";
    	        }
    			else {
    				$txt = "Permission refus&eacute;e.";
    			}
    	    }
    	    else {
    	        $txt = "Le fichier n'existe pas.";
    	    }
    	    return $txt;
    	}
    }
    ?>
    l'exemple que tu copie/colle dans un fichier appelé comme tu veux.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    <form method="post" action="<?php echo htmlentities($_SERVER['PHP_SELF']); ?>" enctype="multipart/form-data" >
    	Uplodez votre image:<br />
    	<input type="file" name="image_upload" />
    	<input type="submit" value="Upload" />
    </form>
    <?php
    require_once("classe_upload_img.php");
    if(isset($_FILES['image_upload']['name']) && !empty($_FILES['image_upload']['tmp_name'])) {
    	//on instancie la classe
    	$upload = new Upload_Img();
    	//le chemin vers ton répertoire où tu va mettre ton image, ici à la racine.
    	$path_img = "";
    	//on upload l'image grace à la méthode upload_image.
    	//Les parametres sont les suivants:
    	//$upload->upload_image("nom du champ type file", $chemin_ou_mettre_limage, "option redimentionnement(0,1,2,ou 3), "largeur de l'image finale si option redimentionnement = 0", "coté de l'image transformée en image carré si option redimentionnement = 1)
    	//fais des essais en mettant 0 1 2 ou 3, c'est interresant tu verra.
    	$img = $upload->upload_image("image_upload", $path_img, "0", "185", "66");
    	if(isset($upload->upload_img_ok) && $upload->upload_img_ok != "") {
    		echo $message = "L'image a bien &eacute;t&eacute; upload&eacute;e.";
    	}
    	else {
    		echo $message = "Erreur lors du transfert.";
    	}
    }
    ?>
    Les deux fichiers doivent être mis au même endroit.
    Et pourtant... Elle tourne.
    http://www.djib.me

  5. #5
    Membre du Club Avatar de bylka
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    184
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2007
    Messages : 184
    Points : 60
    Points
    60
    Par défaut
    Merci pour vos réponses

    En faite j'ai essayé l'exemple du lien fournis par Gats

    j'ai bien mis dans mon formulaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <form method="POST" action="save_file.php" enctype="multipart/form-data">
    Fichier : <input type="file" name=my_image">
    <input type="submit" name="envoyer" value="Envoyer le fichier">
    et dans le fichier de submit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    if(isset($_FILES['my_image']))
    { 
    	$destination = "upload/";
    	$filename = $_FILES['my_image']['tmp_name'];
    	$fichier = basename($_FILES['my_image']['name']);
    	move_uploaded_file  ( $filename  , $destination.$fichier);
    }
    l'image est bien crée mais avec aucun aperçu , j'ai un truc vide!!

  6. #6
    Membre confirmé
    Développeur Web
    Inscrit en
    Avril 2005
    Messages
    397
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2005
    Messages : 397
    Points : 518
    Points
    518
    Par défaut
    En même temps je ne vois aucun code pour un affichage de l'image ^^

    pense à vérifier le format du fichier envoyé par soucis de sécurité.
    Zend PHP5 Certification
    MySQL 4 Core Certification

  7. #7
    Membre du Club Avatar de bylka
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    184
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2007
    Messages : 184
    Points : 60
    Points
    60
    Par défaut
    j'ai pas besoin de l'afficher , je veux juste l'enregistrer
    donc pour vérifier l'image , j'accède directement au répertoire du serveur et je fais ouvrir

  8. #8
    Membre confirmé
    Développeur Web
    Inscrit en
    Avril 2005
    Messages
    397
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2005
    Messages : 397
    Points : 518
    Points
    518
    Par défaut
    Citation Envoyé par bylka Voir le message
    j'ai pas besoin de l'afficher , je veux juste l'enregistrer
    donc pour vérifier l'image , j'accède directement au répertoire du serveur et je fais ouvrir
    AH je vois on s'est mal compris alors

    Tu veux dire que ton fichier est corrumpu
    Zend PHP5 Certification
    MySQL 4 Core Certification

  9. #9
    Membre expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Points : 3 972
    Points
    3 972
    Par défaut
    Bonjour,

    cela ne viendrait pas du guillement manquant ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="file" name="my_image">

  10. #10
    Membre du Club Avatar de bylka
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    184
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2007
    Messages : 184
    Points : 60
    Points
    60
    Par défaut
    Tu veux dire que ton fichier est corrumpu
    Voila , un problème dans l'image enregistrée

  11. #11
    Membre du Club Avatar de bylka
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    184
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2007
    Messages : 184
    Points : 60
    Points
    60
    Par défaut
    Non c pas a cause du guillement manquant

  12. #12
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    302
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 302
    Points : 141
    Points
    141
    Par défaut
    Voila ton code qui fonctionne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <form method="post" action="save_file.php" enctype="multipart/form-data">
    Fichier : <input type="file" accept="image/jpg" name="my_image">
    <input type="submit" name="envoyer" value="Envoyer le fichier">
    Et :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?php
    if(isset($_FILES['my_image']))
    { 
      echo "Test";
    	$destination = "upload/";
    	$filename = $_FILES['my_image']['tmp_name'];
    	$fichier = basename($_FILES['my_image']['name']);
    	move_uploaded_file($filename  , $destination . $fichier);
    }
    ?>
    Kévin

  13. #13
    Membre du Club Avatar de bylka
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    184
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2007
    Messages : 184
    Points : 60
    Points
    60
    Par défaut
    J'ai repris le même code , mais l'image est toujours vide (aucun aperçu)
    la je commence a me demander si ce n'est pas une configuration php qui me manque?

  14. #14
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    302
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 302
    Points : 141
    Points
    141
    Par défaut
    Affiche t-il le echo?
    Kévin

  15. #15
    Membre du Club Avatar de bylka
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    184
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2007
    Messages : 184
    Points : 60
    Points
    60
    Par défaut
    Oui , il affiche bien le echo et l'image est bien crée sur le serveur , mais vide!
    chez toi ça marche?

  16. #16
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    302
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 302
    Points : 141
    Points
    141
    Par défaut
    Cela veut dire quoi l'image est vide?

    Oui chez moi il ajoute bien une photo au dossier upload!
    Kévin

  17. #17
    Membre averti Avatar de beejeridou
    Homme Profil pro
    Webmaster
    Inscrit en
    Février 2007
    Messages
    280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Février 2007
    Messages : 280
    Points : 342
    Points
    342
    Par défaut
    Citation Envoyé par kev484 Voir le message
    Voila ton code qui fonctionne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <form method="post" action="save_file.php" enctype="multipart/form-data">
    Fichier : <input type="file" accept="image/jpg" name="my_image">
    <input type="submit" name="envoyer" value="Envoyer le fichier">
    Et :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?php
    if(isset($_FILES['my_image']))
    { 
      echo "Test";
    	$destination = "upload/";
    	$filename = $_FILES['my_image']['tmp_name'];
    	$fichier = basename($_FILES['my_image']['name']);
    	move_uploaded_file($filename  , $destination . $fichier);
    }
    ?>
    les erreurs ne sont pas gérées dans ton code et la fonction move_uploaded_file peut retourner false pour X raisons, si ton fichier n'est pas valide ou trop gros etc...
    essaye de mettre une condition comme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    if(move_uploaded_file($filename  , $destination . $fichier) == true) {
        echo "Fichier uploadé";
    }
    else {
        echo "erreur lors du transfert";
    }
    Et pourtant... Elle tourne.
    http://www.djib.me

  18. #18
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    302
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 302
    Points : 141
    Points
    141
    Par défaut
    Oui je fais apres il faudra verifier l'extension ainsi que la taille du fichier mais pour l'instant je donnais juste le code brut juste pour copier une image.
    Kévin

  19. #19
    Membre du Club Avatar de bylka
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    184
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2007
    Messages : 184
    Points : 60
    Points
    60
    Par défaut
    ouufff enfin le problème détecte,
    En faite , l'image est bien crée mais il ya que l'user apache qui a le droit de lecture, et comme moi j'ouvrais l'image directement sur le répertoire du serveur ( avec la souris ) du coup j'avais pas les droits de lecture, mais si j'affiche l'image avec le code ça marche
    en final , le problème c'est une question de droit d'accès

    Merci à vous touuuuuuuuuus pour l'aide
    a+

  20. #20
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    302
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 302
    Points : 141
    Points
    141
    Par défaut
    De rien mais penses bien a faire toutes les autres vérification pour ne pas avoir de personnes qui déposeraient des .php!!

    Aussi verifier la taille des upload car elles sont différentes suivants les hebergeurs.
    Kévin

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. upload une image sur le serveur
    Par S_ami dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 04/09/2010, 08h56
  2. uploader une image sur le serveur
    Par kespy13 dans le forum Langage
    Réponses: 5
    Dernier message: 07/04/2006, 20h01
  3. [JBouton] Comment mettre une image sur un bouton ?
    Par Kyti dans le forum Composants
    Réponses: 6
    Dernier message: 11/03/2005, 16h08
  4. comment Positionner une image sur une autre ?
    Par moumoule17 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 25/11/2004, 16h41
  5. Comment copier une image dans le presse papier.
    Par cprogil dans le forum Langage
    Réponses: 7
    Dernier message: 09/09/2003, 15h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo