[PHP] Problème génération miniature

Fermé
ten62 Messages postés 158 Date d'inscription dimanche 22 juin 2008 Statut Membre Dernière intervention 5 avril 2011 - 11 févr. 2009 à 15:48
ten62 Messages postés 158 Date d'inscription dimanche 22 juin 2008 Statut Membre Dernière intervention 5 avril 2011 - 11 févr. 2009 à 16:15
Bonjour,

Voila, j'ai fait un script d'upload d'images multiples, avec en même temps génération de miniatures.
Le script fonctionne très bien

Problème : La génération des miniatures ne se fait plus avec de très grandes images (2000*1000px ...)

Avez vous une idée ?



CODE :
***********************************************************
	for($i=0;$i<sizeof($_FILES["srcfichier"]["name"]);$i++) {
			 // Si l'input est vide, on passe
			 if(!$_FILES["srcfichier"]["name"][$i]) continue;
		$dossier = '../_files/';
		$fichier = basename($_FILES["srcfichier"]["name"][$i]);
		$taille_maxi = 10000000;
		$taille = filesize($_FILES["srcfichier"]["tmp_name"][$i]);
		$extensions = array('.png', '.gif', '.jpg', '.jpeg', '.JPG' );
		$extension = strrchr($_FILES["srcfichier"]["name"][$i], '.'); 
		// SECURITE
		// type de fichier
		if(!in_array($extension, $extensions))  {
			 $erreur = '<p align="center" class="validation">Vous devez uploader un fichier de type png, gif, jpg, jpeg...</p>';
		}
		// TAILLE DU FICHIER
		if($taille > $taille_maxi) {
			 $erreur = '<p align="center" class="validation">Le fichier est trop lourd ...</p>';
		}
		// SI PAS d'ERREUR
		if(!empty($erreur))  {
		echo $erreur;
		}
		else
		{
		
	// ***********  AJOUT DES POSTS DANS LA BBD ****************

	// RECUPERATION DES POSTS
	$desc_courte = $_POST['elm2'];
	$desc_long   = $_POST['elm1'];
	$name        = $_POST['name'];
	
	// DATE
	$date        = "Le ".date("d/m/y &agrave; G:i:s");
	
	// ORDRE
	$requete     = mysql_query("SELECT COUNT(id) AS Cpt FROM flauw_art1");
	$array       = mysql_fetch_array($requete);
	$ordre       = $array['Cpt'] + 1;

	// AJOUT DANS LA BASE DE DONNES
	$sql = mysql_query("INSERT INTO flauw_art1 (id, name, hits, description, desc_courte, ordre, date, P1, M1, P2, M2, P3, M3, P4, M4, P5, M5) VALUES('', '$name' , '0', '$desc_long', '$desc_courte', '$ordre', '$date', '', '', '', '', '', '', '', '', '', '')");

	// Recup&eacute;ration de l'ID du produit
	$id = mysql_insert_id(); 
		
		
		
			 $nb = rand(1000000, 1000000000);
			 $fichier2 = "GAMME-".$id."-".$nb;
	
			 // AJOUT DU FICHIER SUR LE SERVEUR
			 if(move_uploaded_file($_FILES["srcfichier"]["tmp_name"][$i], $dossier.$fichier2.$extension))   {
			 $photo[$i] = "1";
			 } else  {
			 $photo[$i] = "O";
			 }

		$urlA = $dossier.$fichier2.$extension;
		$urlB = substr($urlA, 2);
		$urlP = $domaine.$urlB;
		$urlMA = $dossier.$fichier2."_mini".$extension;
		$urlMB = substr($urlMA, 2);
		$urlM = $domaine.$urlMB;
	
		// ********************** Creation miniature ***********************************
			  $PHOTO_mini = $fichier2."_mini";
			  switch ($extension) { 
				case ".jpg": $imageSource2 = imagecreatefromjpeg($urlA); break;
				case ".peg": $imageSource2 = imagecreatefromjpeg($urlA); break;	
				case ".JPG": $imageSource2 = imagecreatefromjpeg($urlA); break;	
				case ".PEG": $imageSource2 = imagecreatefromjpeg($urlA); break;		   
				case ".png": $imageSource2 = imagecreatefrompng($urlA); break;
				case ".gif": $imageSource2 = imagecreatefromgif($urlA); break;
			  }
			  // dimensions de l image source
			  $WSource2 = imagesx($imageSource2);
			  $HSource2 = imagesy($imageSource2);
			  // REDIMENSIONNEMENT et SAUVEGARDE de la PHOTO
			  $W_max2 = 150;
			  $H_max2 = 100;
			  if($WSource2 > $W_max2 && $WSource2 >= $HSource2) {
				$W2 = 150;
				$H2 = ($W2 * ($HSource2 / $WSource2));  
			  }
			  elseif($HSource2 > $H_max2 && $HSource2 >= $WSource2) {
				$H2 = 100;
				$W2 = ($H2 * ($WSource2 / $HSource2));  
			  }	
			  elseif($HSource2 > $H_max2 && $HSource2 = $WSource2) {
				$H2 = 100;
				$W2 = 150;  
			  }
			  else { $W2 = $WSource2; $H2 = $HSource2; 	   }
				 // on cree une image vide aux dimensions de destination
				 $imageDest2 = imagecreatetruecolor($W2, $H2);
				 // redimensionnement de la photo
				 imagecopyresampled($imageDest2, $imageSource2, 0, 0, 0, 0, $W2, $H2, $WSource2, $HSource2); 
				 // enregistrement de la PHOTO REDIMENSIONNEE avec la fonction appropri&eacute;e :
				 switch ( $extension ) { 
				 case ".jpg":
				   imagejpeg($imageDest2, $dossier.$PHOTO_mini.$extension, 9);
				   break;
				 case ".JPG":
				   imagejpeg($imageDest2, $dossier.$PHOTO_mini.$extension, 100);
				   break;
				 case ".peg":
				   imagejpeg($imageDest2, $dossier.$PHOTO_mini.$extension, 100);
				   break;
				 case ".PEG":
				   imagejpeg($imageDest2, $dossier.$PHOTO_mini.$extension, 100);
				   break;
				 case ".gif":
				   imagegif ($imageDest2, $dossier.$PHOTO_mini.$extension, 100);
				   break;
				 case ".png":
				   imagepng ($imageDest2, $dossier.$PHOTO_mini.$extension, 100);
				   break;
				 }
		// *************************** FIn miniature *******************************************	 
	

	// AJOUT DU l'ADRESSE DE L'IMAGE DANS LA BBD
	$i2 = $i+1;
	$champP = "P".$i2;
	$champM = "M".$i2;	
	$sql = mysql_query('UPDATE flauw_art1 SET '.$champP.' = "'.$urlP.'", '.$champM.' = "'.$urlM.'"  WHERE id='.$id.'');
	
	
	//if($sql) { $champ[$i] = 0; } else { $champ[$i] = 1; }
$champ[$i] = 0;

    }
	}
	// RECHERCHE DES ERREURS
	$erreur_P = array_search('1', $champ);
	
	if(empty($erreur_P) or !isset($erreur)) {
	echo "Ajout de &quot;".$name."&quot; effectu&eacute; avec succ&egrave;s ! ";
	}
	else {
	echo "Une erreur est survenue. Merci de recommencer.";
	}

***********************************************************
A voir également:

1 réponse

ten62 Messages postés 158 Date d'inscription dimanche 22 juin 2008 Statut Membre Dernière intervention 5 avril 2011 23
11 févr. 2009 à 16:15
PS :

je sais maitenant que le problème vient de la fonction : imagecreatefromjpeg()

elle bloque tout.

J'ai pourtant changer memory_limit à 1000M ...

Une idée ?
0