Script qui ne fonctionne pas.

Eléphant du PHP | 75 Messages

10 févr. 2010, 22:00

Bonsoir,

Je viens de finaliser un script qui permet de uploader et redimensionner des images à la volée. Cependant, celui-ci refuse de marché. :s
                                                <?php
						if(isset($_POST['photo'])){
							$largeur_maximum = 300;
							$hauteur_maximum  = 400;
							$photo = $_FILES['photo']['tmp_name'];
							$taille = $_FILES['photo']['size'];
							
							include('redimensionner.php');
							
							if($verification_photo == true){
								if(!is_dir('photos/')){
								mkdir('photos', 0777);
								}
								if(!is_dir('photos/'.$pseudo)){
									mkdir('photos/'.$pseudo, 0777);
								}
								if(!is_dir('photos/'.$pseudo.'/photo_profil')){
									mkdir('photos/'.$pseudo.'/photo_profil', 0777);
								}
								
								$nom = 'photo_profil';
								$destination = 'photos/'.$pseudo.'/photo_profil/';
								$liste = scandir($destination);
								if(isset($liste[2]) && $liste[2] !== ''){
									unlink($destination.$liste[2]);
								}
								
								if($extension_photo = 'gif'){
									imagecreatefromgif($photo,$destination.$nom.'.'.$extension_photo);
								}
								elseif($extension_photo = 'png'){
									imagecreatefrompng($photo,$destination.$nom.'.'.$extension_photo,9);
								}
								else{
									imagecreatefromjpeg($photo,$destination.$nom.'.'.$extension_photo,100);
								}
								print("<script language = \"JavaScript\">"); 
								print("location.href = 'parametres.php?ref=2';"); 
								print("</script>");		
							}
							else{
								switch($verification_photo){
									case 1:
										$erreur = 'Merci de renseigner une photo dans le formulaire';
									break;
									case 2:
										$erreur = 'Le format de la photo n\'est pas bon. Les formats acceptés sont : jpg, jpeg, gif, png.';
									break;
								}
							}							
						}
						
						if(isset($erreur) && $erreur !== ''){
							echo '<span class="erreur_para">'.$erreur.'</span>';
						}
						$destination = 'photos/'.$pseudo.'/photo_profil/';
						if(is_dir($destination)){
							$liste = scandir($destination);
							if(isset($liste[2]) && $liste[2] !== ''){
								echo '<img src="'.$destination.$liste[2].'">';
							}
						}
						?>
						<form method="post" enctype="multipart/form-data" action="parametres.php?ref=2">
							Photo de profil : <br />
							<input type="file" name="photo" style="margin-left:50px;"><br /><br />
							<input type="submit" name="envoyer_photo"> 
						</form>
Le script ne me retourne aucune erreur, mais le problème c'est que rien ne se passe quand je clique sur "Valider"... << Il n'y a aucune création de fichier, aucuns up d'image ni redimension, et même les erreur ne s'affichent pas si le fichier n'est pas une image ou si il n'a pas été renseigné !

J'ai tenté de tester mes $variables, mais aucun "echo" n'est retourné ici :
<?php
if($verification_photo == true){
    echo 'test';	
}
else{
    echo 'test';
}
?>
Merci de votre aide. :)

ViPHP
ViPHP | 2291 Messages

10 févr. 2010, 23:29

Salut,
ici
if(isset($_POST['photo']))
A mon sens cela devrais être
if(isset($_FILES['photo']
Non :?:
ImageCe que l'on apprend par l'effort reste toujours ancré beaucoup plus longtemps.

Eléphant du PHP | 75 Messages

11 févr. 2010, 08:25

Merci de ta réponse.

Cependant, je viens de remplacer $_POST par $_FILES, mais ça ne change rien. :/

;)

Eléphant du PHP | 75 Messages

12 févr. 2010, 18:52

Problème résolu, j'ai modifier j'ai modifier la fonction :
	function verification_photo($taille,$extension_photo,$extension_authorise){
		if($taille < 1){
			return 1;
		}
		elseif(!in_array($extension_photo[1],$extension_authorise)){
			return 2;
		}
		else{
			$erreur = null;
			return $erreur;
		}
	}
Et la vérification :
if(empty($verification_photo)){
// code
}
Voilà. ;)

Eléphant du PHP | 75 Messages

13 févr. 2010, 19:23

Bonsoir,

Après plusieurs test sans résultat, je reviens vous voir pour vous exposez mon problème.

J'ai une erreur assez étrange.

Voilà le script qui se compose de deux parties.

parametres.php et redimensionner.php

Code : PHP
<?php
						if(isset($_FILES['photo'])){
							$largeur_maximum = 300;
							$hauteur_maximum  = 400;
							$photo = $_FILES['photo']['name'];
							$photo_tmp = $_FILES['photo']['tmp_name'];
							$taille = $_FILES['photo']['size'];
							
							include('redimensionner.php');
							
							if(empty($verification_photo)){
								if(!is_dir('photos/')){
								mkdir('photos', 0777);
								}
								if(!is_dir('photos/'.$pseudo)){
									mkdir('photos/'.$pseudo, 0777);
								}
								if(!is_dir('photos/'.$pseudo.'/photo_profil')){
									mkdir('photos/'.$pseudo.'/photo_profil', 0777);
								}
								
								$nom = 'photo_profil';
								$destination = 'photos/'.$pseudo.'/photo_profil/';
								$liste = scandir($destination);
								if(isset($liste[2]) && $liste[2] !== ''){
									unlink($destination.$liste[2]);
								}
								
								if($extension_photo == 'gif'){
									imagecreatefromgif($photo_miniature,$destination.$nom.'.'.$extension_photo);
								}
								elseif($extension_photo == 'png'){
									imagecreatefrompng($photo_miniature,$destination.$nom.'.'.$extension_photo,9);
								}
								else{
									imagecreatefromjpeg($photo_miniature,$destination.$nom.'.'.$extension_photo,100);
								}
							}
							else{
								switch($verification_photo){
									case 1:
										$erreur = 'Merci de renseigner une photo dans le formulaire';
									break;
									case 2:
										$erreur = 'Le format de la photo n\'est pas bon. Les formats acceptés sont : jpg, jpeg, gif, png.';
									break;
								}
							}							
						}
						
						if(isset($erreur) && $erreur !== ''){
							echo '<span class="erreur_para">'.$erreur.'</span><br /><br />';
						}
						$destination = 'photos/'.$pseudo.'/photo_profil/';
						if(is_dir($destination)){
							$liste = scandir($destination);
							if(isset($liste[2]) && $liste[2] !== ''){
								echo '<img src="'.$destination.$liste[2].'">';
							}
						}
						?>
						<form method="post" enctype="multipart/form-data" action="parametres.php?ref=2">
							Photo de profil : <br />
							<input type="file" name="photo" style="margin-left:50px;"><br /><br />
							<input type="submit" name="envoyer_photo"> 
						</form>

Code : PHP
<?php 
if(isset($_FILES['photo'])){
	function verification_photo($taille,$extension_photo,$extension_authorise){
		if($taille < 1){
			return 1;
		}
		elseif(!in_array($extension_photo,$extension_authorise)){
			return 2;
		}
		else{
			$erreur = null;
			return $erreur;
		}
	}

	$extension_authorise = array('jpg','jpeg','gif','png');
	$minuscule = strtolower($photo);
	$explode = explode('.',$minuscule);
	@$extension_photo = $explode[1];

	$verification_photo = verification_photo($taille,$extension_photo,$extension_authorise);
	
	if(empty($verification_photo)){
		if($extension_photo = 'gif'){
			$photo_intermediaire = imagecreatefromgif($photo_tmp);
		}
		elseif($extension_photo = '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]);
		}
		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]);
		}
		imagedestroy($photo_intermediaire);
		
	}
}
?>

Quand je choisie une image dans le formulaire et que je clique sur "valider", le script me renvoi cette erreur :

Warning: imagecreatefromgif() [function.imagecreatefromgif]: 'F:\Wamp\tmp\php13AE.tmp' is not a valid GIF file in F:\Wamp\www\Projet\redimensionner.php on line 25.

Ce qui équivaut à cette ligne :

Code : PHP
<?php
if($extension_photo = 'gif'){
			$photo_intermediaire = imagecreatefromgif($photo_tmp);
}
?>

Alors que l'image up est au format jpg.

Merci et bonne soirée.

ViPHP
ViPHP | 2287 Messages

13 févr. 2010, 19:45

Bonjour,
                if($extension_photo = 'gif'){
                        $photo_intermediaire = imagecreatefromgif($photo_tmp);
                }
                elseif($extension_photo = 'png'){
                        $photo_intermediaire = imagecreatefrompng($photo_tmp);
                }
                else{
                        $photo_intermediaire = imagecreatefromjpeg($photo_tmp);
                }
En php, le symbole égal (=) signifie l'affectation de valeur de la droite vers la gauche, l'égalité entre deux valeurs étant quand à elle représentée par deux signes égal consécutifs (==).

C'est une des erreurs les plus traîtres qui soient, car aucun message d'erreur de PHP ne vient te la signaler (puisque la syntaxe est parfaitement valide, elle a juste une signification très différente de ce qu'un oeil humain peut imaginer lors d'une lecture rapide). C'est particulièrement méchant dans les if, while, for... Et c'est tombé sur toi pour cette fois, félicitations =D>

C'est pourquoi à chaque fois que j'écris un if, while, for (ou autre structure du même type) je fais toujours une petite vérification pour vérifier que je n'ai pas oublié un =, ce qui peut me faire gagner plusieurs heures de débugage. Quelquechose me dit que tu le feras toi aussi à partir de maintenant... ;)

++
if(!@work()){ Nespresso(); } else { what(); }
______________________________

Eléphant du PHP | 75 Messages

13 févr. 2010, 20:38

En effet, une erreur simple mais qu'on oublie si vite ! Merci !

J'ai aussi remplacé imagecreatefrom... par imagepng dans la page parametres.php.

Seulement, j'ai remarqué quelque chose.

J'ai testé mon script avec pas mal d'images. Mais j'ai une image où quand j'essaye de l'upploader ça me retourne cette erreur : Erreur 101 (net::ERR_CONNECTION_RESET) : Erreur inconnue (sous Google chrome) et sous FF, j'ai cette erreur : La connexion a été réinitialisée

Quelqu'un sait d'où cela peut venir ?

Une petite aide : Quand je clique sur parcourir pour prendre une photo, c'est la seule ou l'extension est inclue dans le nom.

Image

Edit : Problème réglé, l'extension de l'image était .png. ><