[RESOLU] Chargement d'une image

Petit nouveau ! | 7 Messages

20 juin 2014, 12:01

Bonjour, je ne sais pas trop ou mettre mon post...
Je vous explique mon problème :

Je génère une image png a partir de données contenu dans ma bdd (mysql).
En environnement local tout fonctionne, pas de problème.
Migration vers le serveur de qualif et la je me retrouve devant un mystère.
Mon image charge quand elle est petite (deux ligne soit 4Ko) mais ne fonctionne plus quand elle devient plus grande (environ 90 lignes soit 28Ko)
Impossible de trouver une explication.

Config serveur similaire a config local niveau matériel.
Code strictement identique (comparaison notepadd++)
PHP5 sur les deux
Apache 2.2 sur les deux
Mysql 5.5 serveur | Mysql 5.6 local
Linux serveur | Windows 7 local

Mammouth du PHP | 1339 Messages

21 juin 2014, 16:31

Tu peux nous montrer le contenu des images ?
Bon sinon tu me fais un message privé et on se fait un TeamViewer

Petit nouveau ! | 7 Messages

07 juil. 2014, 09:18

Désolé pour le retard.
Ci joint un exemple d'image, il faut savoir que celle ci fonctionne bien sur les deux, l'image concernée est la même en trois fois plus grosse (trop grosse pour l'attaché au post)
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.

Mammouth du PHP | 1339 Messages

07 juil. 2014, 10:07

Hello,

J'avais mal compris je pense.
Je pensais que tu stockais le contenu de l'image dans un champ de ta table.
En fait, tu crées une image en PHP et les valeurs du tableau sont générées avec le contenu de la base de données ?
Est-ce que generer un fichier Excel ne suffirait pas ? Un PDF au pire ?
Pour ce genre d'image un JPG serait pas plus léger ?

Peux-tu me monter le code PHP pour generer l'image ? En remplacant le MySQL par un faux tableau fixe.
Bon sinon tu me fais un message privé et on se fait un TeamViewer

Petit nouveau ! | 7 Messages

07 juil. 2014, 14:17

Effectivement je crée une image en fonction des donnée de ma base.
Excel/pdf ou jpeg/png ça change pas grand chose pour moi, l'idée c'est que j'avais déjà un bon exemple en jpeg/png du coup j'ai repris ça.
Le passage de jpeg a png ne change pas grand chose a la taille de l'image créée.

---------------------------------------------------- CODE PHP ---------------------------------------------------------------
<?PHP
/**
* Génération de l'image du calendrier des congés.
*
* Le calendrier généré au moyen de la bibliothèque GD est une image PNG.
*
* @version 1.2.0
* @author Emmanuel Delage <[email protected]>
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-en.html
* @copyright CNRS (c) 2010<br>LPC Clermont-Ferrand UMR6533<br>
* 24 Av des Landais<br>Aubière
* @package phpMyLab
* @subpackage Conges
*/

error_reporting(E_ALL ^ E_NOTICE);

$imColor = hex2int(validHexColor('dddddd'));

include_once 'connectionPHPMYLABDB.php';

//Connection a la bdd et requetes
$link = mysqli_connect($mysql_location,$mysql_user,$mysql_password,$mysql_base) or die('Connection impossible: ' . mysqli_error($link));
$query="SELECT NOM, PRENOM, GROUPE FROM T_UTILISATEUR";
if(!(empty($_REQUEST['groupe']) || $_REQUEST['groupe']=="tout le monde")) 
	$query.=" WHERE GROUPE='".$_REQUEST['groupe']."' ORDER BY NOM";
else
	$query.=" WHERE ADMIN!=1 ORDER BY GROUPE, NOM";
$result = $link->query($query);


// Step 1. Create a new blank image
$hauteur_ligne=20;
$hauteur=41+mysqli_num_rows($result)*$hauteur_ligne;
$largeur_groupe=100;
$largeur_nom=200;
$nombre_de_mois=2;
$largeur_mois=1200/$nombre_de_mois;
$largeur_tableau=$largeur_groupe+$largeur_nom+$nombre_de_mois*$largeur_mois;
$largeur=$largeur_tableau+20;
$im = imageCreate($largeur,$hauteur+5);



// Step 2. Set background to 'color'
$background = imageColorAllocate($im, 255, 255, 255);
$background = imageColorTransparent($im,$background);

$annee=(int)$_REQUEST['uneannee'];//ou fonction intval(str);

//inclure de façon inconditionnel (sans if) ; bonne pratique avec require_once
require_once("calendrier_variables.php");



$orange = imagecolorallocate($im, 255, 102, 0); // Couleur orange
$noir = imagecolorallocate($im, 0, 0, 0); // noir
$ferie = imagecolorallocate($im, 182, 182, 182); // gris foncé
$attente = imagecolorallocate($im, 254,204,83); // jaune
$we = imagecolorallocate($im, 150, 150, 150); // gris
$rtt = imagecolorallocate($im, 100, 190, 21); // vert
$cp =  imagecolorallocate($im, 77, 129, 173); // bleu
$entre = imagecolorallocate($im, 35, 80, 129); // bleu foncé

imagesetthickness($im, 1); // Epaisseur de 1px

$moisdemande=(int)$_REQUEST['mois'];
$scale=0;
for($i=0;$i<12;$i++)
	$largeur_jour[$i]=$largeur_mois/$dureeMois[$i];

if($moisdemande<(13-$nombre_de_mois))
{
        for($i=$moisdemande;$i<$nombre_de_mois+$moisdemande;$i++)
        {
                imagefilledrectangle($im,$largeur_groupe+$largeur_nom+$scale*$largeur_mois,10,$largeur_groupe+$largeur_nom+$largeur_mois+$scale*$largeur_mois,30,$entre);
                imagerectangle($im,$largeur_groupe+$largeur_nom+$scale*$largeur_mois,10,$largeur_groupe+$largeur_nom+$largeur_mois+$scale*$largeur_mois,30,$noir);
                imageString($im,3,$largeur_groupe+$largeur_nom+10+$scale*$largeur_mois,14,$lesMois2[$i]." ".$annee,$blanc) ;
                for($j=0;$j<$dureeMois[$i];$j++)
                {
                        imagerectangle($im,$largeur_groupe+$largeur_nom+$scale*$largeur_mois+$j*$largeur_jour[$i],30,$scale*$largeur_mois+$largeur_groupe+$largeur_nom+($j+1)*$largeur_jour[$i],40,$noir);
                        imageString($im,1,$largeur_groupe+$largeur_nom+2+$scale*$largeur_mois+$j*$largeur_jour[$i],32,"".$j+1,$noir) ;
                }
                $scale++;
        }
}
else
{
	for($i=$moisdemande;$i<$nombre_de_mois+$moisdemande;$i++)
        {
                $indice=$i;
                if($i>=12)
                {
                        $annee++;
                        $indice=0;
                }
                imagefilledrectangle($im,$largeur_groupe+$largeur_nom+$scale*$largeur_mois,10,$largeur_groupe+$largeur_nom+$largeur_mois+$scale*$largeur_mois,30,$entre);
                imagerectangle($im,$largeur_groupe+$largeur_nom+$scale*$largeur_mois,10,$largeur_groupe+$largeur_nom+$largeur_mois+$scale*$largeur_mois,30,$noir);
                imageString($im,3,$largeur_groupe+$largeur_nom+10+$scale*$largeur_mois,14,$lesMois2[$indice]." ".$annee,$blanc) ;
                for($j=0;$j<$dureeMois[$indice];$j++)
                {
                        imagerectangle($im,$largeur_groupe+$largeur_nom+$scale*$largeur_mois+$j*$largeur_jour[$indice],30,$scale*$largeur_mois+$largeur_groupe+$largeur_nom+($j+1)*$largeur_jour[$indice],40,$noir);
                        imageString($im,1,$largeur_groupe+$largeur_nom+2+$scale*$largeur_mois+$j*$largeur_jour[$indice],32,"".$j+1,$noir) ;
                }
                $scale++;
        }
}
$k=0;
while($ligne = mysqli_fetch_array($result)) //Pour chaque personne dans le groupe visé
{
	//on créer le tableau
	imagefilledrectangle($im,$largeur_groupe,40+$k*$hauteur_ligne,$largeur_groupe+$largeur_nom,40+$k*$hauteur_ligne+$hauteur_ligne,$entre);
	imagerectangle($im,$largeur_groupe,40+$k*$hauteur_ligne,$largeur_groupe+$largeur_nom,40+$k*$hauteur_ligne+$hauteur_ligne,$noir);
	imageString($im,2,$largeur_groupe+5,45+$k*$hauteur_ligne,$ligne['NOM']." ".ucfirst(strtolower($ligne['PRENOM'])),$blanc);
	$k++;
	$scale=0;
	
	$jourj=0;
	for($w=0;$w<$moisdemande;$w++)
		$jourj+=$dureeMois[$w];
	
	if($moisdemande<(13-$nombre_de_mois))
	{
			for($i=$moisdemande;$i<$nombre_de_mois+$moisdemande;$i++)
			{
					for($j=0;$j<$dureeMois[$i];$j++)
					{

							$couleur2=$blanc;
							//si c'est un jour ferie
							for($w=0;$w<sizeof($feries);$w++)
									if($i==$feries[$w][1] && $j==$feries[$w][0])
											$couleur2=$ferie;
							//si c'est le WE
							$jourj++;
							if( ($jourj%7)==$PS || ($jourj%7)==($PS+1))
									$couleur2=$we;

							imagefill($im,$largeur_groupe+$largeur_nom+$scale*$largeur_mois+$j*$largeur_jour[$i],41+$k*$hauteur_ligne,$couleur2);
							//si c'est aujourd'hui
							if (date("j") == $j+1 && date("n") == $i+1 && date("Y") == $annee)
									$couleur=$orange;
							else
									$couleur=$noir;

							imagerectangle($im,$largeur_groupe+$largeur_nom+$scale*$largeur_mois+$j*$largeur_jour[$i],40+$k*$hauteur_ligne,
															   $largeur_groupe+$largeur_nom+$scale*$largeur_mois+$j*$largeur_jour[$i]+$largeur_jour[$i],40,$couleur);

					}
					$scale++;
			}
	}
	else
	{
		for($i=$moisdemande;$i<$nombre_de_mois+$moisdemande;$i++)
		{
				$indice=$i;
				if($i>=12)
				{
						$annee++;
						$indice=0;
				}
				for($j=0;$j<$dureeMois[$indice];$j++)
				{
						$couleur2=$blanc;
						//si c'est un jour ferie
						for($w=0;$w<sizeof($feries);$w++)
								if($indice==$feries[$w][1] && $j==$feries[$w][0])
										$couleur2=$ferie;
						//si c'est le WE
						$jourj++;
						if( ($jourj%7)==$PS || ($jourj%7)==($PS+1))
								$couleur2=$we;
						//si c'est aujourd'hui
						if (date("j") == $j+1 && date("n") == $i+1 && date("Y") == $annee)
								$couleur=$orange;
						else
								$couleur=$noir;

						imagefill($im,$largeur_groupe+$largeur_nom+$scale*$largeur_mois+$j*$largeur_jour[$indice],41+$k*$hauteur_ligne,$couleur2);
						imagerectangle($im,$largeur_groupe+$largeur_nom+$scale*$largeur_mois+$j*$largeur_jour[$indice],40+$k*$hauteur_ligne,
														   $largeur_groupe+$largeur_nom+$scale*$largeur_mois+$j*$largeur_jour[$indice]+$largeur_jour[$indice],40,$couleur);
				}
				$scale++;
		}
	}
	//on regarde si elle est en congés
	$query="SELECT T_UTILISATEUR.NOM as nom, T_UTILISATEUR.PRENOM as prenom, T_CONGE.DEBUT_DATE as date_debut, T_CONGE.FIN_DATE as date_fin, T_CONGE.DEBUT_AM as debut_am, T_CONGE.FIN_PM as fin_pm, T_CONGE.VALIDE as valide, T_CONGE.type as type FROM T_CONGE JOIN T_UTILISATEUR WHERE T_CONGE.utilisateur=T_UTILISATEUR.utilisateur AND valide!=-1 AND valide!=-2";
	$resulT_CONGEs = $link->query($query);
	
	while($ligne_conge = mysqli_fetch_array($resulT_CONGEs))
	{
		$annee_deb_conge=(int)($ligne_conge[2][0].$ligne_conge[2][1].$ligne_conge[2][2].$ligne_conge[2][3]);
		$mois_deb_conge=(int)($ligne_conge[2][5].$ligne_conge[2][6])-1;
		$jour_deb_conge=(int)($ligne_conge[2][8].$ligne_conge[2][9]);
		
		$annee_fin_conge=(int)($ligne_conge[3][0].$ligne_conge[3][1].$ligne_conge[3][2].$ligne_conge[3][3]);
		$mois_fin_conge=(int)($ligne_conge[3][5].$ligne_conge[3][6])-1;
		$jour_fin_conge=(int)($ligne_conge[3][8].$ligne_conge[3][9]);
		
		
		$x1=$largeur_groupe+$largeur_nom+($mois_deb_conge-$moisdemande)*$largeur_mois+($jour_deb_conge)*$largeur_jour[$mois_deb_conge];
		
		if($annee_fin_conge>$annee_deb_conge)
			$x2=$largeur_tableau;
		else
			$x2=$largeur_groupe+$largeur_nom+($mois_fin_conge-$moisdemande)*$largeur_mois+($jour_fin_conge)*$largeur_jour[$mois_fin_conge];
		
		if($x2<($largeur_groupe+$largeur_nom))
			$x2=($largeur_groupe+$largeur_nom);
		if($x1<($largeur_groupe+$largeur_nom))
			$x1=($largeur_groupe+$largeur_nom);
		if($x2>$largeur_tableau)
			$x2=$largeur_tableau;
			
		 //imageString($im,2,10+$x2*2,250,"x1 : ".$x1,$noir);
		 //imageString($im,2,10+$x2*2,280,"x2 : ".$x2,$noir);
		
		if($ligne_conge[6]==0)
			$couleur=$attente;
		elseif($ligne_conge[7]==1)
			$couleur=$rtt;
		else
			$couleur=$cp;
		
		if($annee_deb_conge==$annee && $ligne_conge['nom']==$ligne['NOM'])
		{
			if($jour_deb_conge==$jour_fin_conge)
			{
				if($ligne_conge[4]==0 && $x1>($largeur_groupe+$largeur_nom))
				{
					$points=array($x1-$largeur_jour[$mois_deb_conge],40+($k-1+1)*$hauteur_ligne,
								  $x1,40+($k-1+1)*$hauteur_ligne,
								  $x1,40+($k-1)*$hauteur_ligne);
					imagefilledpolygon ($im, $points, 3, $couleur);
				}
				if($ligne_conge[5]==1 && $x2>($largeur_groupe+$largeur_nom) && $x2<$largeur_tableau)
				{
					$points=array($x2-$largeur_jour[$mois_fin_conge],40+($k-1)*$hauteur_ligne,
								  $x2,40+($k-1)*$hauteur_ligne,
								  $x2-$largeur_jour[$mois_fin_conge],40+($k-1+1)*$hauteur_ligne);
					imagefilledpolygon ($im, $points, 3, $couleur);
				}
			}
			else
			{
				if($ligne_conge[4]==0)
				{
					if($x1>($largeur_groupe+$largeur_nom))
						imagefilledrectangle($im,$x1-$largeur_jour[$mois_deb_conge],41+($k-1)*$hauteur_ligne,$x1,41-2+($k-1+1)*$hauteur_ligne,$couleur);
				}
				else
				{
					if($x1>($largeur_groupe+$largeur_nom))
					{
						$points=array($x1-$largeur_jour[$mois_deb_conge],41-2+($k-1+1)*$hauteur_ligne,
									  $x1,41-2+($k-1+1)*$hauteur_ligne,
									  $x1,41+($k-1)*$hauteur_ligne);
						imagefilledpolygon ($im, $points, 3, $couleur);
					}
				}
				if($ligne_conge[5]==1)
				{
					if($x2>($largeur_groupe+$largeur_nom) && $x2<$largeur_tableau)
						imagefilledrectangle($im,$x2,42+($k-1)*$hauteur_ligne,$x2,41-2+($k-1+1)*$hauteur_ligne,$couleur);
				}
				else
				{
					if($x2>($largeur_groupe+$largeur_nom) && $x2<$largeur_tableau)
					{
						$points=array($x2-$largeur_jour[$mois_fin_conge],41+($k-1)*$hauteur_ligne,
									  $x2,41-2+($k-1)*$hauteur_ligne,
									  $x2-$largeur_jour[$mois_fin_conge],41-2+($k-1+1)*$hauteur_ligne);
						imagefilledpolygon ($im, $points, 3, $couleur);
					}
				}
				if($x1>($largeur_groupe+$largeur_nom) && $x1<$largeur_tableau && $x2-$largeur_jour[$mois_fin_conge]>($largeur_groupe+$largeur_nom) && $x2-$largeur_jour[$mois_fin_conge]<$largeur_tableau)
					imagefilledrectangle($im,$x1,41+($k-1)*$hauteur_ligne,$x2-$largeur_jour[$mois_fin_conge],41-2+($k-1+1)*$hauteur_ligne,$couleur);
			}
		}	
		
	}

}


if(empty($_REQUEST['groupe']) || $_REQUEST['groupe']=="tout le monde") 
{
	$y1=40;
	$y2=40;
	$query2="SELECT count(*), GROUPE FROM T_UTILISATEUR WHERE ADMIN!=1 GROUP BY GROUPE";
	$result2 = $link->query($query2);
	while($ligne2 = mysqli_fetch_array($result2))
	{
		$y2+=$hauteur_ligne*$ligne2[0];
		
		imagefilledrectangle($im,0,$y1,$largeur_groupe,$y2,$entre);
		imagerectangle($im,0,$y1,$largeur_groupe,$y2,$noir);
		imageline($im,0,$y1+1,$largeur_tableau,$y1+1,$noir);
		imageline($im,0,$y2+1,$largeur_tableau,$y2+1,$noir);
		
		if(strlen($ligne2[1])>16)
		{
			// Met la portion de chaine dans $chaine
			$chaine=substr($ligne2[1],0,16);
			// position du dernier espace
			$espace=strrpos($chaine," ");
			// test si il ya un espace
			if($espace)
				$chaine=substr($chaine,0,$espace);
			$chaine_tab[0] = $chaine;
			$chaine_tab[1] = substr($ligne2[1],$espace+1,$espace+16);
				
			imageString($im,2,5,(($y1+$y2)/2)-10,$chaine_tab[0],$blanc);
			imageString($im,2,5,(($y1+$y2)/2),$chaine_tab[1],$blanc);
		}
		else
		{
			imageString($im,2,5,(($y1+$y2)/2)-6,$ligne2[1],$blanc);
		}
		
		$y1+=$hauteur_ligne*$ligne2[0];
	}
}



mysql_close($link);
imagefill($im,0,0,$blanc);

// Step 3. Send the headers (at last possible time)
header('Content-type: image/png');

// Step 4. Output the image as a PNG/JPEG
//imagePNG($im);
imageJPEG($im);

// Step 5. Delete the image from memory
imageDestroy($im); 


/**
 * Convertit un hexa en 3 int pour RBG
 *
 * @param string 6-digit hexadecimal color
 * @return array 3 elements 'r', 'g', & 'b'
 */
function hex2int($hex) {
        return array( 'r' => hexdec(substr($hex, 0, 2)), // 1st pair of digits
                      'g' => hexdec(substr($hex, 2, 2)), // 2nd pair
                      'b' => hexdec(substr($hex, 4, 2))  // 3rd pair
                    );
}

/**
 * Vérifie si la valeur hexadécimale est correcte pour une couleur
 *
 * @param string 6-digit hexadecimal string to be validated
 * @param string default color to be returned if $input isn't valid
 * @return string the validated 6-digit hexadecimal color
 */
function validHexColor($input = '000000', $default = '000000') {
    // A valid Hexadecimal color is exactly 6 characters long
    // and eigher a digit or letter from a to f
    return (preg_match('#^[0-9a-fA-F]{6}$#', $input)) ? $input : $default ;
}

?>
Modifié en dernier par moogli le 08 juil. 2014, 11:16, modifié 1 fois.
Raison : bbcode php

Mammouth du PHP | 1339 Messages

07 juil. 2014, 16:26

Hello,

Désolé mais comme demandé, je peux pas faire de test avec des fichiers include que j'ai pas et une base de données que j'ai pas non plus.
Donc a part t'expliquer comment débugger un code en supprimant du texte petit a petit ...
Bon sinon tu me fais un message privé et on se fait un TeamViewer

Petit nouveau ! | 7 Messages

07 juil. 2014, 16:45

Ah merde j'avais pas penser aux includes, je te renvois un code modifier avant ce soir pour que tu puisse tester ca.
Mais ce que je coimprends pas c'est qu'il fonctionne sur une machine et pas sur l'autre

Petit nouveau ! | 7 Messages

07 juil. 2014, 17:11

Voila le code modifié.
<?PHP
//Tableau d'exemple
for ($i=0; $i<90; $i++)	
{
	$exemple[$i] = array(
		UTILISATEUR => 'toto'.$i,
		NOM  => 'nom'.$i,
		PRENOM => 'prenom'.$i,
		);
		
}
$lesMois2=array("Janvier","Fevrier","Mars","Avril","Mai","Juin","Juillet","Aout","Septembre","Octobre","Novembre","Decembre");
$dureeMois=array(31,28,31,30,31,30,31,31,30,31,30,31);

// Step 1. Create a new blank image
$hauteur_ligne=20;
$hauteur=41+90*$hauteur_ligne;
$largeur_groupe=100;
$largeur_nom=200;
$nombre_de_mois=2;
$largeur_mois=1200/$nombre_de_mois;
$largeur_tableau=$largeur_groupe+$largeur_nom+$nombre_de_mois*$largeur_mois;
$largeur=$largeur_tableau+20;
$im = imageCreate($largeur,$hauteur+5);



// Step 2. Set background to 'color'
$background = imageColorAllocate($im, 255, 255, 255);
$background = imageColorTransparent($im,$background);

$annee=(int)$_REQUEST['uneannee'];



$orange = imagecolorallocate($im, 255, 102, 0); // Couleur orange
$noir = imagecolorallocate($im, 0, 0, 0); // noir
$ferie = imagecolorallocate($im, 182, 182, 182); // gris foncé
$attente = imagecolorallocate($im, 254,204,83); // jaune
$we = imagecolorallocate($im, 150, 150, 150); // gris
$rtt = imagecolorallocate($im, 100, 190, 21); // vert
$cp =  imagecolorallocate($im, 77, 129, 173); // bleu
$entre = imagecolorallocate($im, 35, 80, 129); // bleu foncé

imagesetthickness($im, 1); // Epaisseur de 1px

$moisdemande=(int)$_REQUEST['mois'];
$scale=0;
for($i=0;$i<12;$i++)
	$largeur_jour[$i]=$largeur_mois/$dureeMois[$i];

if($moisdemande<(13-$nombre_de_mois))
{
        for($i=$moisdemande;$i<$nombre_de_mois+$moisdemande;$i++)
        {
                imagefilledrectangle($im,$largeur_groupe+$largeur_nom+$scale*$largeur_mois,10,$largeur_groupe+$largeur_nom+$largeur_mois+$scale*$largeur_mois,30,$entre);
                imagerectangle($im,$largeur_groupe+$largeur_nom+$scale*$largeur_mois,10,$largeur_groupe+$largeur_nom+$largeur_mois+$scale*$largeur_mois,30,$noir);
                imageString($im,3,$largeur_groupe+$largeur_nom+10+$scale*$largeur_mois,14,$lesMois2[$i]." ".$annee,$blanc) ;
                for($j=0;$j<$dureeMois[$i];$j++)
                {
                        imagerectangle($im,$largeur_groupe+$largeur_nom+$scale*$largeur_mois+$j*$largeur_jour[$i],30,$scale*$largeur_mois+$largeur_groupe+$largeur_nom+($j+1)*$largeur_jour[$i],40,$noir);
                        imageString($im,1,$largeur_groupe+$largeur_nom+2+$scale*$largeur_mois+$j*$largeur_jour[$i],32,"".$j+1,$noir) ;
                }
                $scale++;
        }
}
else
{
	for($i=$moisdemande;$i<$nombre_de_mois+$moisdemande;$i++)
        {
                $indice=$i;
                if($i>=12)
                {
                        $annee++;
                        $indice=0;
                }
                imagefilledrectangle($im,$largeur_groupe+$largeur_nom+$scale*$largeur_mois,10,$largeur_groupe+$largeur_nom+$largeur_mois+$scale*$largeur_mois,30,$entre);
                imagerectangle($im,$largeur_groupe+$largeur_nom+$scale*$largeur_mois,10,$largeur_groupe+$largeur_nom+$largeur_mois+$scale*$largeur_mois,30,$noir);
                imageString($im,3,$largeur_groupe+$largeur_nom+10+$scale*$largeur_mois,14,$lesMois2[$indice]." ".$annee,$blanc) ;
                for($j=0;$j<$dureeMois[$indice];$j++)
                {
                        imagerectangle($im,$largeur_groupe+$largeur_nom+$scale*$largeur_mois+$j*$largeur_jour[$indice],30,$scale*$largeur_mois+$largeur_groupe+$largeur_nom+($j+1)*$largeur_jour[$indice],40,$noir);
                        imageString($im,1,$largeur_groupe+$largeur_nom+2+$scale*$largeur_mois+$j*$largeur_jour[$indice],32,"".$j+1,$noir) ;
                }
                $scale++;
        }
}
$k=0;
//while($ligne = mysqli_fetch_array($result)) //Pour chaque personne dans le groupe visé


foreach( $exemple as $ligne)
{
	//on créer le tableau
	imagefilledrectangle($im,$largeur_groupe,40+$k*$hauteur_ligne,$largeur_groupe+$largeur_nom,40+$k*$hauteur_ligne+$hauteur_ligne,$entre);
	imagerectangle($im,$largeur_groupe,40+$k*$hauteur_ligne,$largeur_groupe+$largeur_nom,40+$k*$hauteur_ligne+$hauteur_ligne,$noir);
	imageString($im,2,$largeur_groupe+5,45+$k*$hauteur_ligne,$ligne['NOM']." ".ucfirst(strtolower($ligne['PRENOM'])),$blanc);
	$k++;
	$scale=0;
	
	$jourj=0;
	for($w=0;$w<$moisdemande;$w++)
		$jourj+=$dureeMois[$w];
	
	if($moisdemande<(13-$nombre_de_mois))
	{
			for($i=$moisdemande;$i<$nombre_de_mois+$moisdemande;$i++)
			{
					for($j=0;$j<$dureeMois[$i];$j++)
					{

							$couleur2=$blanc;
							//si c'est un jour ferie
							for($w=0;$w<sizeof($feries);$w++)
									if($i==$feries[$w][1] && $j==$feries[$w][0])
											$couleur2=$ferie;
							//si c'est le WE
							$jourj++;
							if( ($jourj%7)==$PS || ($jourj%7)==($PS+1))
									$couleur2=$we;

							imagefill($im,$largeur_groupe+$largeur_nom+$scale*$largeur_mois+$j*$largeur_jour[$i],41+$k*$hauteur_ligne,$couleur2);
							//si c'est aujourd'hui
							if (date("j") == $j+1 && date("n") == $i+1 && date("Y") == $annee)
									$couleur=$orange;
							else
									$couleur=$noir;

							imagerectangle($im,$largeur_groupe+$largeur_nom+$scale*$largeur_mois+$j*$largeur_jour[$i],40+$k*$hauteur_ligne,
															   $largeur_groupe+$largeur_nom+$scale*$largeur_mois+$j*$largeur_jour[$i]+$largeur_jour[$i],40,$couleur);

					}
					$scale++;
			}
	}
	else
	{
		for($i=$moisdemande;$i<$nombre_de_mois+$moisdemande;$i++)
		{
				$indice=$i;
				if($i>=12)
				{
						$annee++;
						$indice=0;
				}
				for($j=0;$j<$dureeMois[$indice];$j++)
				{
						$couleur2=$blanc;
						//si c'est un jour ferie
						for($w=0;$w<sizeof($feries);$w++)
								if($indice==$feries[$w][1] && $j==$feries[$w][0])
										$couleur2=$ferie;
						//si c'est le WE
						$jourj++;
						if( ($jourj%7)==$PS || ($jourj%7)==($PS+1))
								$couleur2=$we;
						//si c'est aujourd'hui
						if (date("j") == $j+1 && date("n") == $i+1 && date("Y") == $annee)
								$couleur=$orange;
						else
								$couleur=$noir;

						imagefill($im,$largeur_groupe+$largeur_nom+$scale*$largeur_mois+$j*$largeur_jour[$indice],41+$k*$hauteur_ligne,$couleur2);
						imagerectangle($im,$largeur_groupe+$largeur_nom+$scale*$largeur_mois+$j*$largeur_jour[$indice],40+$k*$hauteur_ligne,
														   $largeur_groupe+$largeur_nom+$scale*$largeur_mois+$j*$largeur_jour[$indice]+$largeur_jour[$indice],40,$couleur);
				}
				$scale++;
		}
	}
}

//mysql_close($link);
imagefill($im,0,0,$blanc);

// Step 3. Send the headers (at last possible time)
header('Content-type: image/png');

// Step 4. Output the image as a PNG/JPEG
//imagePNG($im);
imageJPEG($im);

// Step 5. Delete the image from memory
imageDestroy($im); 

?> 
Modifié en dernier par moogli le 08 juil. 2014, 11:17, modifié 1 fois.
Raison : bbcode php

Mammouth du PHP | 1339 Messages

07 juil. 2014, 18:16

Bizarrement quand je fais un imagefill en $blanc ca marche, si je fais un imagefill en $we ou $ferie il galere grave ...

J'ai isolé ce qu'il fait chier mais c'est pas pour autant que j'ai trouvé la solution ...
Je ferais ca en Excel personnelement mais ca c'est mon probleme.

T'as grosso modo un soucis de boucle dans tes jours ferié qui fait que le script tourne en boucle.
Ca manquait parfois un peu de { } que j'ai rajouté pour mieux comprendre.

Je serais toi, je prendrais 20 minutes, pour refaire le script ligne par ligne (bloc par bloc) pour voir si on avance bien comme il faut.
<?PHP

$PS = 0;
$feries = array(0 => array(0 => 'Mon anniversaire', 1 =>'2013-03-20'));

//Tableau d'exemple
for ($i=0; $i<90; $i++)   
{
   $exemple[$i] = array(
      'UTILISATEUR' => 'toto'.$i,
      'NOM'  => 'nom'.$i,
      'PRENOM' => 'prenom'.$i,
      );
      
}
$lesMois2=array("Janvier","Fevrier","Mars","Avril","Mai","Juin","Juillet","Aout","Septembre","Octobre","Novembre","Decembre");
$dureeMois=array(31,28,31,30,31,30,31,31,30,31,30,31);

// Step 1. Create a new blank image
$hauteur_ligne=20;
$hauteur=41+90*$hauteur_ligne;
$largeur_groupe=100;
$largeur_nom=200;
$nombre_de_mois=2;
$largeur_mois=1200/$nombre_de_mois;
$largeur_tableau=$largeur_groupe+$largeur_nom+$nombre_de_mois*$largeur_mois;
$largeur=$largeur_tableau+20;
$im = imagecreate($largeur,$hauteur+5);



// Step 2. Set background to 'color'
$background = imagecolorallocate($im, 255, 255, 255);
$background = imagecolortransparent($im,$background);

$annee=(int)$_REQUEST['uneannee'];

$blanc = imagecolorallocate($im, 255, 255, 255); // Couleur blanc
$orange = imagecolorallocate($im, 255, 102, 0); // Couleur orange
$noir = imagecolorallocate($im, 0, 0, 0); // noir
$ferie = imagecolorallocate($im, 182, 182, 182); // gris foncé
$attente = imagecolorallocate($im, 254,204,83); // jaune
$we = imagecolorallocate($im, 150, 150, 150); // gris
$rtt = imagecolorallocate($im, 100, 190, 21); // vert
$cp =  imagecolorallocate($im, 77, 129, 173); // bleu
$entre = imagecolorallocate($im, 35, 80, 129); // bleu foncé

imagesetthickness($im, 1); // Epaisseur de 1px

$moisdemande=(int)$_REQUEST['mois'];
$scale=0;
for($i=0;$i<12;$i++) {
   
   $largeur_jour[$i] = $largeur_mois/$dureeMois[$i];
   
	if($moisdemande < (13-$nombre_de_mois)) {
		
        for($i=$moisdemande;$i<$nombre_de_mois+$moisdemande;$i++) {
                imagefilledrectangle($im,$largeur_groupe+$largeur_nom+$scale*$largeur_mois,10,$largeur_groupe+$largeur_nom+$largeur_mois+$scale*$largeur_mois,30,$entre);
                imagerectangle($im,$largeur_groupe+$largeur_nom+$scale*$largeur_mois,10,$largeur_groupe+$largeur_nom+$largeur_mois+$scale*$largeur_mois,30,$noir);
                imagestring($im,3,$largeur_groupe+$largeur_nom+10+$scale*$largeur_mois,14,$lesMois2[$i]." ".$annee,$blanc) ;
                for($j=0;$j<$dureeMois[$i];$j++) {
                	imagerectangle($im,$largeur_groupe+$largeur_nom+$scale*$largeur_mois+$j*$largeur_jour[$i],30,$scale*$largeur_mois+$largeur_groupe+$largeur_nom+($j+1)*$largeur_jour[$i],40,$noir);
                	imagestring($im,1,$largeur_groupe+$largeur_nom+2+$scale*$largeur_mois+$j*$largeur_jour[$i],32,"".$j+1,$noir) ;
                }
                $scale++;
        }
		
	} else {
		
   		for($i2=$moisdemande;$i2<$nombre_de_mois+$moisdemande;$i2++) {
                $indice = $i;
                if($i>=12) {
                        $annee++;
                        $indice=0;
                }
                imagefilledrectangle($im,$largeur_groupe+$largeur_nom+$scale*$largeur_mois,10,$largeur_groupe+$largeur_nom+$largeur_mois+$scale*$largeur_mois,30,$entre);
                imagerectangle($im,$largeur_groupe+$largeur_nom+$scale*$largeur_mois,10,$largeur_groupe+$largeur_nom+$largeur_mois+$scale*$largeur_mois,30,$noir);
                imagestring($im,3,$largeur_groupe+$largeur_nom+10+$scale*$largeur_mois,14,$lesMois2[$indice]." ".$annee,$blanc) ;
                for($j=0;$j<$dureeMois[$indice];$j++) {
                        imagerectangle($im,$largeur_groupe+$largeur_nom+$scale*$largeur_mois+$j*$largeur_jour[$indice],30,$scale*$largeur_mois+$largeur_groupe+$largeur_nom+($j+1)*$largeur_jour[$indice],40,$noir);
                        imagestring($im,1,$largeur_groupe+$largeur_nom+2+$scale*$largeur_mois+$j*$largeur_jour[$indice],32,"".$j+1,$noir) ;
                }
                $scale++;
        }
		
	}
}

$k=0;
//while($ligne = mysqli_fetch_array($result)) //Pour chaque personne dans le groupe visé


foreach($exemple as $ligne) {
	
   //on créer le tableau
   imagefilledrectangle($im,$largeur_groupe,40+$k*$hauteur_ligne,$largeur_groupe+$largeur_nom,40+$k*$hauteur_ligne+$hauteur_ligne,$entre);
   imagerectangle($im,$largeur_groupe,40+$k*$hauteur_ligne,$largeur_groupe+$largeur_nom,40+$k*$hauteur_ligne+$hauteur_ligne,$noir);
   imagestring($im,2,$largeur_groupe+5,45+$k*$hauteur_ligne,$ligne['NOM']." ".ucfirst(strtolower($ligne['PRENOM'])),$blanc);
   $k++;
   $scale=0;
   
   $jourj=0;
   for($w=0;$w<$moisdemande;$w++) {
	   
      $jourj += $dureeMois[$w];
   
   		if($moisdemande < (13-$nombre_de_mois)) {
	   
			for($i=$moisdemande;$i<$nombre_de_mois+$moisdemande;$i++) {
			 
               for($j=0;$j<$dureeMois[$i];$j++) {

                     $couleur2 = $blanc;
                     //si c'est un jour ferie
                     for($w=0;$w<sizeof($feries);$w++) {
                           if($i==$feries[$w][1] && $j==$feries[$w][0]) $couleur2=$ferie;
                     //si c'est le WE
                     $jourj++;
					 }
					 
                     if(($jourj%7)==$PS || ($jourj%7)==($PS+1)) $couleur2 = $we;

                     imagefill($im,$largeur_groupe+$largeur_nom+$scale*$largeur_mois+$j*$largeur_jour[$i],41+$k*$hauteur_ligne,$couleur2);
                     //si c'est aujourd'hui
                     $couleur = ((date("j") == $j+1) && (date("n") == $i+1) && (date("Y") == $annee)) ? $orange : $noir;
                     imagerectangle($im,$largeur_groupe+$largeur_nom+$scale*$largeur_mois+$j*$largeur_jour[$i],40+$k*$hauteur_ligne, $largeur_groupe+$largeur_nom+$scale*$largeur_mois+$j*$largeur_jour[$i]+$largeur_jour[$i],40,$couleur);

               }
               $scale++;
         }
		 
   } else {
	   
      for($i=$moisdemande;$i<$nombre_de_mois+$moisdemande;$i++) {
            
			$indice = $i;
            if($i >= 12)  {
                  $annee++;
                  $indice = 0;
            }
			
            for($j=0; $j<$dureeMois[$indice]; $j++) {
                  
				  $couleur2 = $blanc;
                  //si c'est un jour ferie
                  /*for($w=0;$w<=count($feries);$w++) {
                       // if(($indice == $feries[$w][1]) && ($j == $feries[$w][0])) $couleur2 = $blanc; //$ferie;
				  }
							  
                  //si c'est le WE
                  $jourj++;
                  //if(($jourj%7) == $PS || ($jourj%7) == ($PS+1)) $couleur2 = $blanc; //$we;
                  //si c'est aujourd'hui*/
                  $couleur = ((date("j") == $j+1) && (date("n") == $i+1) && (date("Y") == $annee)) ? $orange : $noir;

                  imagefill($im, $largeur_groupe+$largeur_nom+$scale*$largeur_mois+$j*$largeur_jour[$indice], 41+$k*$hauteur_ligne, $couleur2);
                  
				  imagerectangle($im,$largeur_groupe+$largeur_nom+$scale*$largeur_mois+$j*$largeur_jour[$indice],40+$k*$hauteur_ligne,$largeur_groupe+$largeur_nom+$scale*$largeur_mois+$j*$largeur_jour[$indice]+$largeur_jour[$indice],40,$couleur);
				  
            }
            $scale++;
      }
	  
			}
   }
}

//mysql_close($link);
imagefill($im,0,0,$blanc);

// Step 3. Send the headers (at last possible time)
header('Content-type: image/png');

// Step 4. Output the image as a PNG/JPEG
//imagePNG($im);
imagejpeg($im);

// Step 5. Delete the image from memory
imagedestroy($im);

?>
Bon sinon tu me fais un message privé et on se fait un TeamViewer

Petit nouveau ! | 7 Messages

08 juil. 2014, 10:35

Euh ton code marche pas chez moi :p
J'ai remodifié mon code pour remettre des accolades, parce que celles que t'avais rajoutées correspondaient pas toujours a ce que j'avais en tête.

Je n'ai pas eu de problème pour l'imagefill quelque soit la couleur.
A priori après relecture minutieuse pas de boucle infinie, juste du temps pour traiter mon while dans mon while (foreach dans le code modifié)...

Je vais essayer de faire autrement qu'un image pour voir ce que ca rend parceque le tableau doit etre hyper lisible sur les exicgences du responsable...
<?PHP
//Tableau d'exemple
$PS = 0;
$feries = array(0 => array(0 => 'Mon anniversaire', 1 =>'2013-03-20'));

for ($i=0; $i<90; $i++)	
{
	$exemple[$i] = array(
		UTILISATEUR => 'toto'.$i,
		NOM  => 'nom'.$i,
		PRENOM => 'prenom'.$i,
		);
		
}
$lesMois2=array("Janvier","Fevrier","Mars","Avril","Mai","Juin","Juillet","Aout","Septembre","Octobre","Novembre","Decembre");
$dureeMois=array(31,28,31,30,31,30,31,31,30,31,30,31);

// Step 1. Create a new blank image
$hauteur_ligne=20;
$hauteur=41+90*$hauteur_ligne;
$largeur_groupe=100;
$largeur_nom=200;
$nombre_de_mois=2;
$largeur_mois=1200/$nombre_de_mois;
$largeur_tableau=$largeur_groupe+$largeur_nom+$nombre_de_mois*$largeur_mois;
$largeur=$largeur_tableau+20;
$im = imageCreate($largeur,$hauteur+5);



// Step 2. Set background to 'color'
$background = imageColorAllocate($im, 255, 255, 255);
$background = imageColorTransparent($im,$background);

$annee=(int)$_REQUEST['uneannee'];



$orange = imagecolorallocate($im, 255, 102, 0); // Couleur orange
$noir = imagecolorallocate($im, 0, 0, 0); // noir
$ferie = imagecolorallocate($im, 182, 182, 182); // gris foncé
$attente = imagecolorallocate($im, 254,204,83); // jaune
$we = imagecolorallocate($im, 150, 150, 150); // gris
$rtt = imagecolorallocate($im, 100, 190, 21); // vert
$cp =  imagecolorallocate($im, 77, 129, 173); // bleu
$entre = imagecolorallocate($im, 35, 80, 129); // bleu foncé

imagesetthickness($im, 1); // Epaisseur de 1px

$moisdemande=(int)$_REQUEST['mois'];
$scale=0;
for($i=0;$i<12;$i++)
{
	$largeur_jour[$i]=$largeur_mois/$dureeMois[$i];
}
if($moisdemande<(13-$nombre_de_mois))
{
        for($i=$moisdemande;$i<$nombre_de_mois+$moisdemande;$i++)
        {
                imagefilledrectangle($im,$largeur_groupe+$largeur_nom+$scale*$largeur_mois,10,$largeur_groupe+$largeur_nom+$largeur_mois+$scale*$largeur_mois,30,$entre);
                imagerectangle($im,$largeur_groupe+$largeur_nom+$scale*$largeur_mois,10,$largeur_groupe+$largeur_nom+$largeur_mois+$scale*$largeur_mois,30,$noir);
                imageString($im,3,$largeur_groupe+$largeur_nom+10+$scale*$largeur_mois,14,$lesMois2[$i]." ".$annee,$blanc) ;
                for($j=0;$j<$dureeMois[$i];$j++)
                {
                        imagerectangle($im,$largeur_groupe+$largeur_nom+$scale*$largeur_mois+$j*$largeur_jour[$i],30,$scale*$largeur_mois+$largeur_groupe+$largeur_nom+($j+1)*$largeur_jour[$i],40,$noir);
                        imageString($im,1,$largeur_groupe+$largeur_nom+2+$scale*$largeur_mois+$j*$largeur_jour[$i],32,"".$j+1,$noir) ;
                }
                $scale++;
        }
}
else
{
	for($i=$moisdemande;$i<$nombre_de_mois+$moisdemande;$i++)
        {
                $indice=$i;
                if($i>=12)
                {
                        $annee++;
                        $indice=0;
                }
                imagefilledrectangle($im,$largeur_groupe+$largeur_nom+$scale*$largeur_mois,10,$largeur_groupe+$largeur_nom+$largeur_mois+$scale*$largeur_mois,30,$entre);
                imagerectangle($im,$largeur_groupe+$largeur_nom+$scale*$largeur_mois,10,$largeur_groupe+$largeur_nom+$largeur_mois+$scale*$largeur_mois,30,$noir);
                imageString($im,3,$largeur_groupe+$largeur_nom+10+$scale*$largeur_mois,14,$lesMois2[$indice]." ".$annee,$blanc) ;
                for($j=0;$j<$dureeMois[$indice];$j++)
                {
                        imagerectangle($im,$largeur_groupe+$largeur_nom+$scale*$largeur_mois+$j*$largeur_jour[$indice],30,$scale*$largeur_mois+$largeur_groupe+$largeur_nom+($j+1)*$largeur_jour[$indice],40,$noir);
                        imageString($im,1,$largeur_groupe+$largeur_nom+2+$scale*$largeur_mois+$j*$largeur_jour[$indice],32,"".$j+1,$noir) ;
                }
                $scale++;
        }
}
$k=0;
//while($ligne = mysqli_fetch_array($result)) //Pour chaque personne dans le groupe visé


foreach( $exemple as $ligne)
{
	//on créer le tableau
	imagefilledrectangle($im,$largeur_groupe,40+$k*$hauteur_ligne,$largeur_groupe+$largeur_nom,40+$k*$hauteur_ligne+$hauteur_ligne,$entre);
	imagerectangle($im,$largeur_groupe,40+$k*$hauteur_ligne,$largeur_groupe+$largeur_nom,40+$k*$hauteur_ligne+$hauteur_ligne,$noir);
	imageString($im,2,$largeur_groupe+5,45+$k*$hauteur_ligne,$ligne['NOM']." ".ucfirst(strtolower($ligne['PRENOM'])),$blanc);
	$k++;
	$scale=0;
	
	$jourj=0;
	for($w=0;$w<$moisdemande;$w++)
	{
		$jourj+=$dureeMois[$w];
	}
	if($moisdemande<(13-$nombre_de_mois))
	{
			for($i=$moisdemande;$i<$nombre_de_mois+$moisdemande;$i++)
			{
					for($j=0;$j<$dureeMois[$i];$j++)
					{

							$couleur2=$blanc;
							//si c'est un jour ferie
							for($w=0;$w<sizeof($feries);$w++)
							{
								if($i==$feries[$w][1] && $j==$feries[$w][0])
								{
									$couleur2=$ferie;
								}
							}
							//si c'est le WE
							$jourj++;
							if( ($jourj%7)==$PS || ($jourj%7)==($PS+1))
							{
								$couleur2=$we;
							}
							imagefill($im,$largeur_groupe+$largeur_nom+$scale*$largeur_mois+$j*$largeur_jour[$i],41+$k*$hauteur_ligne,$couleur2);
							//si c'est aujourd'hui
							if (date("j") == $j+1 && date("n") == $i+1 && date("Y") == $annee)
							{
								$couleur=$orange;
							}
							else
							{
								$couleur=$noir;
							}
							imagerectangle($im,$largeur_groupe+$largeur_nom+$scale*$largeur_mois+$j*$largeur_jour[$i],40+$k*$hauteur_ligne,
															   $largeur_groupe+$largeur_nom+$scale*$largeur_mois+$j*$largeur_jour[$i]+$largeur_jour[$i],40,$couleur);

					}
					$scale++;
			}
	}
	else
	{
		for($i=$moisdemande;$i<$nombre_de_mois+$moisdemande;$i++)
		{
				$indice=$i;
				if($i>=12)
				{
						$annee++;
						$indice=0;
				}
				for($j=0;$j<$dureeMois[$indice];$j++)
				{
						$couleur2=$blanc;
						//si c'est un jour ferie
						for($w=0;$w<sizeof($feries);$w++)
						{
							if($indice==$feries[$w][1] && $j==$feries[$w][0])
							{
								$couleur2=$ferie;
							}
						}
						//si c'est le WE
						$jourj++;
						if( ($jourj%7)==$PS || ($jourj%7)==($PS+1))
						{
							$couleur2=$we;
						}
						//si c'est aujourd'hui
						if (date("j") == $j+1 && date("n") == $i+1 && date("Y") == $annee)
						{
							$couleur=$orange;
						}
						else
						{
							$couleur=$noir;
						}
						imagefill($im,$largeur_groupe+$largeur_nom+$scale*$largeur_mois+$j*$largeur_jour[$indice],41+$k*$hauteur_ligne,$couleur2);
						imagerectangle($im,$largeur_groupe+$largeur_nom+$scale*$largeur_mois+$j*$largeur_jour[$indice],40+$k*$hauteur_ligne,
														   $largeur_groupe+$largeur_nom+$scale*$largeur_mois+$j*$largeur_jour[$indice]+$largeur_jour[$indice],40,$couleur);
				}
				$scale++;
		}
	}
}

//mysql_close($link);
imagefill($im,0,0,$blanc);

// Step 3. Send the headers (at last possible time)
header('Content-type: image/png');

// Step 4. Output the image as a PNG/JPEG
//imagePNG($im);
imageJPEG($im);

// Step 5. Delete the image from memory
imageDestroy($im); 

?> 

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

08 juil. 2014, 11:38

salut,

as tu des différences au niveau de la configuration des serveur ?
Je pense par exemple a la taille mémoire allouable ou le time out de php.

il est fréquent d'être limité par la taille mémoire lorsque l'on travail avec des images (et ce n'est pas parce que ton image fait 200ko qu'en mémoire c'est ce qu'elle fait ;) ajoute a cela les ressources sgbd les variables etc.

si le code fonctionne sur ton poste de dev c'est qu'il est fonctionnel, donc il faut éplucher les log apache / php (display_error off n'implique pas un error_reporting qui ne soit pas a E_ALL ;) )

@+
Il en faut peu pour être heureux ......

Petit nouveau ! | 7 Messages

08 juil. 2014, 11:56

OK j'ai trouvé...
si j’étais mieux organisé j'aurai commencé par ça. j'ai regardé les logs d'apache, donc c’était juste une question de temps d’exécution > 30 sec...
du coup un petit set_time_limit(60) a résolu mon problème merci de ton aide quand même :p

EDIT :
Merci moogli j'y ai pensé en même temps que toi du coup ;)