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 d'une image


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 134
    Par défaut Upload d'une image
    Bonjour.

    Dans la refonte de mon site, je rencontre un problème.
    J'ai coder un script qui permet d'envoyer des images sur une BDD, il est incomplet, mais déjà je rencontre un problème.

    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
    function redimension(&$extension_ok,&$extension_image,$photo,&$erreur,$taille,$photo_tmp,&$taille_image,&$reduction,&$hauteur,&$largeur,&$photo_miniature,&$photo_intermediaire,$hauteur_maximum,$largeur_maximum){
    	$extension_ok = array('jpeg','JPEG','jpg','JPG','gif','GIF','png','PNG');
    	$extension_image = explode('.',$photo);
    	if($taille == 0){
    		$erreur = 'Vous n\'avez pas renseigné de photo dans le formulaire.';
    		return $erreur;
    	}
    	elseif(substr_count($photo,'.') >= 2){
    		$erreur = 'Le nom de la photo envoyé ne peut contenir de "."';
    	}
    	elseif(!in_array($extension_image[1],$extension_ok)){
    		$erreur = 'L\'extension de votre image n\'est pas authorisé. Rappel des extensions authorisée : jpeg,jpg,gif,png.';
    		return $erreur;
    	}
    	elseif($taille > 1048576){
    		$erreur = 'La photo est trop volumineuse. La taille maximal est de 1Mo.';
    		return $erreur;
    	}
    	else{
    		if($extension_image == 'gif' OR $extension_image == 'GIF'){
    			$photo_intermediaire = imagecreatefromgif($photo_tmp);
    		}
    		elseif($extension_image == 'png' OR $extension_image == 'PNG'){
    			$photo_intermediaire = imagecreatefrompng($photo_tmp);
    		}
    		else{
    			$photo_intermediaire = imagecreatefromjpeg($photo_tmp);
    		}
     
    		$taille_image = getimagesize($photo_tmp);
    		$reduction = (($largeur_maximum * 100)/$taille_image[0]);
    		$hauteur = (($taille_image[1] * $reduction)/100);
     
    		if($hauteur > $hauteur_maximum){
    			$reduction = (($hauteur_maximum * 100)/$taille_image[1]);
    			$largeur = (($taille_image[0] * $reduction)/100);
    			$photo_miniature = imagecreatetruecolor($largeur,$hauteur_maximum);
    			imagecopyresampled($photo_miniature,$photo_intermediaire,0,0,0,0,$largeur,$hauteur_maximum,$taille_image[0],$taille_image[1]);
    			return $photo_miniature;
    		}
    		else{
    			$reduction = (($largeur_maximum * 100)/$taille_image[0]);
    			$photo_miniature = imagecreatetruecolor($largeur_maximum,$hauteur);
    			imagecopyresampled($photo_miniature,$photo_intermediaire,0,0,0,0,$largeur_maximum,$hauteur,$taille_image[0],$taille_image[1]);
    			return $photo_miniature;
    		}
    		imagedestroy($photo_intermediaire);		
    	}
    }

    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
    <form method="POST" enctype="multipart/form-data">
    	<span class="sous_titre_orange">
    		Photo de profil :
    	</span>
    	<br />
    	<br />
    	<div id="information">
    		Informations :
    		<br />
    		- Votre image ne doit pas dépasser 1 Mo.
    		<br />
    		- Les extensions acceptés sont jpeg, jpg, gif et png.
    		<br />
    		- Le nom de votre photo ne peut contenir de ".".
    	</div>									
    	<?php
    	if(isset($_POST['envoyer'])){
    		$largeur_maximum = 200;
    		$hauteur_maximum  = 300;						
    		$taille = $_FILES['photo_profil']['size'];
    		$photo_tmp = $_FILES['photo_profil']['tmp_name'];
    		$photo = $_FILES['photo_profil']['name'];
     
    		redimension($extension_ok,$extension_image,$photo,$erreur,$taille,$photo_tmp,$taille_image,$reduction,$hauteur,$largeur,$photo_miniature,$photo_intermediaire,$hauteur_maximum,$largeur_maximum);
     
    		if(!empty($erreur)){
    			echo '
    			<br />
    			<div id="erreur">
    				'.$erreur.'
    			</div>';
    		}
    		else{
    			echo 'good';
    		}
    	}
    	?>
    	<br />
    	Envoyer une photo :
    	<br />
    	<input type="file" name="photo_profil" />
    	<br />
    	<br />
    	<input type="submit" name="envoyer" value="Envoyer" />
    </form>
    Le script fonctionne plutôt bien. Seul problème, quand je test avec une image de type png (j'ai essayé avec 4 images différentes) mon script plante lamentablement...

    Page Web inaccessible

    Il se peut que la page Web à l'adresse http://127.0.0.1/ETM/parametre.php?photo_profil soit temporairement inaccessible ou qu'elle ait été déplacée de façon permanente à une autre adresse Web.

    Plus d'informations sur cette erreur
    Même combat sous IE et FF...

    Alors que quand je tente avec une image de type JPEG ou GIF, tout se passe bien... >>

    Une idée ?

  2. #2
    Membre Expert Avatar de nosferapti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    1 157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 157
    Par défaut
    il ne faut pas faire confiance à l'extension pour connaitre le type de l'image, il vaut mieux utiliser la fonction http://php.net/getimagesize pour ça

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 134
    Par défaut
    Merci d'avoir pris le temps de me répondre.

    J'ai suivi tes conseils :

    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
    function redimension(&$extension_ok,&$extension_image,$photo,&$erreur,$taille,$photo_tmp,&$information_image,&$reduction,&$hauteur,&$largeur,&$photo_miniature,&$photo_intermediaire,$hauteur_maximum,$largeur_maximum){
    	$extension_ok = array('image/jpeg','image/jpg','image/gif','image/png');
    	@$information_image = getimagesize($photo_tmp);
    	if($taille == 0){
    		$erreur = 'Vous n\'avez pas renseigné de photo dans le formulaire.';
    		return $erreur;
    	}
    	elseif(substr_count($photo,'.') >= 2){
    		$erreur = 'Le nom de la photo envoyé ne peut contenir de "."';
    	}
    	elseif(!in_array($information_image,$extension_ok)){
    		$erreur = 'L\'extension de votre image n\'est pas authorisé. Rappel des extensions authorisée : jpeg,jpg,gif,png.';
    		return $erreur;
    	}
    	elseif($taille > 1048576){
    		$erreur = 'La photo est trop volumineuse. La taille maximal est de 1Mo.';
    		return $erreur;
    	}
    	else{
    		if($extension_image == 'gif' OR $extension_image == 'GIF'){
    			$photo_intermediaire = imagecreatefromgif($photo_tmp);
    		}
    		elseif($extension_image == 'png' OR $extension_image == 'PNG'){
    			$photo_intermediaire = imagecreatefrompng($photo_tmp);
    		}
    		else{
    			$photo_intermediaire = imagecreatefromjpeg($photo_tmp);
    		}
    		$reduction = (($largeur_maximum * 100)/$information_image[0]);
    		$hauteur = (($information_image[1] * $reduction)/100);
     
    		if($hauteur > $hauteur_maximum){
    			$reduction = (($hauteur_maximum * 100)/$information_image[1]);
    			$largeur = (($information_image[0] * $reduction)/100);
    			$photo_miniature = imagecreatetruecolor($largeur,$hauteur_maximum);
    			imagecopyresampled($photo_miniature,$photo_intermediaire,0,0,0,0,$largeur,$hauteur_maximum,$information_image[0],$information_image[1]);
    			return $photo_miniature;
    		}
    		else{
    			$reduction = (($largeur_maximum * 100)/$information_image[0]);
    			$photo_miniature = imagecreatetruecolor($largeur_maximum,$hauteur);
    			imagecopyresampled($photo_miniature,$photo_intermediaire,0,0,0,0,$largeur_maximum,$hauteur,$information_image[0],$information_image[1]);
    			return $photo_miniature;
    		}
    		imagedestroy($photo_intermediaire);		
    	}
    }
    ?>
    J'ai enfin trouvé la cause du problème. Enfin en partie.
    La source ce trouve ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    	elseif(!in_array($information_image,$extension_ok)){
    		$erreur = 'L\'extension de votre image n\'est pas authorisé. Rappel des extensions authorisée : jpeg,jpg,gif,png.';
    		return $erreur;
    	}
    Ce bout de code n'est pas fonctionnel. Dans tous les cas, j'aurais une erreur puisque je ne précise par ['mime'] sur la variable $information_image.
    En laissant le code tel quel, même si je tente d'envoyer une image de type PNG, la page ne crache plus ! Dès que j'ajoute le ['mime'] la page crache avec les PNG...

    Une idée ?

Discussions similaires

  1. [Upload] upload d'une image
    Par emna_icn dans le forum Langage
    Réponses: 11
    Dernier message: 04/05/2006, 23h14
  2. [Upload] Upload d'une image
    Par Seth77 dans le forum Langage
    Réponses: 2
    Dernier message: 23/03/2006, 11h00
  3. [Image]upload d'une image
    Par leloup84 dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 07/03/2006, 15h29
  4. [Upload] envoyer une image
    Par carter15_2001 dans le forum Langage
    Réponses: 22
    Dernier message: 20/01/2006, 18h52
  5. [Upload] Renommer une image uploadée
    Par Empty_body dans le forum Langage
    Réponses: 4
    Dernier message: 05/01/2006, 06h51

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